Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

KeyEvent (precica na tastaturi za button)

[es] :: Java :: KeyEvent (precica na tastaturi za button)

[ Pregleda: 2111 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jmix23
Jankovic Miljan
Database - Programer
Priboj

Član broj: 175500
Poruke: 69
82.117.198.*



Profil

icon KeyEvent (precica na tastaturi za button)04.05.2009. u 14:52 - pre 182 meseci
Pozdrav narode,
hocu da za svako dugme na aplikaciji napravim precicu na tastaturi...e sad, pomocu setMnemonic(KeyEvent.VK) sam uspeo da napravim jednu precicu :

CODE:
jbnButtons[16] = new JButton("+");
jbnButtons[16].setMnemonic(KeyEvent.VK_ADD);

ali mi ovo isto ne radi za drugo dugme:

CODE:

jbnButtons[17] = new JButton("*");
jbnButtons[17].setMnemonic(KeyEvent.VK_MULTIPLY);

pa me zanima kako to da resim. Jos jedna stvarcica, setMnemonic(KeyEvent.VK) iziskuje pritiskanje dodatnog dugmeta ALT, zanima kako da napravim direktnu precicu na tastaturi....

p.s. Pocetnik sam u svetu Jave pa svaka pridika, savet, predlog, ideja...ce dobro doci i razmotrena s moje strane !!! ;)

Unapred hvala !!!
jmix
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.i-rose.si.

Sajt: b.flyingoranges.com


+117 Profil

icon Re: KeyEvent (precica na tastaturi za button)05.05.2009. u 09:03 - pre 182 meseci
Evo primera za Ctrl+Shift+S
Code:
appLogoutURLMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));


To ide za meni i najlaksi je nacin. Drugo, malo komplikovanije resenje je da registrujes global hotkey. Prvo treba da napravis novu klasu koja ce da osluskuje pritisak dugmeta:

Code:
public class TableCopyListener implements KeyEventDispatcher {

    public boolean dispatchKeyEvent(KeyEvent ke) {
        if (ke.getComponent() instanceof JTable) {
            JTable tbl = (JTable)ke.getComponent();
            if (ke.getKeyCode() == KeyEvent.VK_C && ke.isControlDown()) {
                int row = tbl.getSelectedRow();
                int col = tbl.getSelectedColumn();
                if (row > -1) {
                    String str = ((AbstractTableModel)tbl.getModel()).getValueAt(row, col).toString();
                    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(str), null);
                    return true;
                }
            }
        }
        return false;
    }
}


Ovaj listener npr. osluskuje Ctrl+C. Zatim registrujes taj listener kod KeyboardFocusManager-a:

Code:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new TableCopyListener());
 
Odgovor na temu

jmix23
Jankovic Miljan
Database - Programer
Priboj

Član broj: 175500
Poruke: 69
82.117.198.*



Profil

icon Re: KeyEvent (precica na tastaturi za button)05.05.2009. u 11:39 - pre 182 meseci
Gajo2 hvala na trudu...
Nego, ovo za meni sam znao i on mi je jasan, dok mi ovaj drugi (komplikovaniji nacin) i nije bas najjasniji, pa bih te zamolio ako mozes malo bolje da objasnis...ono sto u stvari meni treba je da samo jedno dugme bude precica za odredjeni event, a ne kombinacija dugmadi, jer i sam setMnemonic iziskuje priskanje ALT dugmeta (po defaultu)...mozda se ovo sto meni treba krije u ovom komplikovanijem nacinu, ali mi nije bas jasan pa i ne vidim :)
jmix
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.i-rose.si.

Sajt: b.flyingoranges.com


+117 Profil

icon Re: KeyEvent (precica na tastaturi za button)05.05.2009. u 11:47 - pre 182 meseci
Hmm, pa tamo gde pise
Code:
if (ke.getKeyCode() == KeyEvent.VK_C && ke.isControlDown()) {

mogao bi napisati npr.
Code:
if (ke.getKeyCode() == KeyEvent.VK_F12) {

pa ces dobiti event koji ce reagovati na F12, bez alta.

Evo kostura:
Code:
public class TableCopyListener implements KeyEventDispatcher {

    public boolean dispatchKeyEvent(KeyEvent ke) {
        if (ke.getKeyCode() == KeyEvent.VK_F12) {
              // radi sta hoces
        }
        return false;
    }
}
 
Odgovor na temu

jmix23
Jankovic Miljan
Database - Programer
Priboj

Član broj: 175500
Poruke: 69
82.117.198.*



Profil

icon Re: KeyEvent (precica na tastaturi za button)05.05.2009. u 11:53 - pre 182 meseci
Ok , hvala :)
jmix
 
Odgovor na temu

vrabicica

Član broj: 210174
Poruke: 6
*.com
Via: [es] mailing liste



Profil

icon Re: KeyEvent (precica na tastaturi za button)05.05.2009. u 14:25 - pre 182 meseci
 
Odgovor na temu

Tulex
Danguba
Novi Sad

Član broj: 170959
Poruke: 121
91.148.66.*



Profil

icon Re: KeyEvent (precica na tastaturi za button)06.05.2009. u 09:41 - pre 182 meseci
gajo2 moram ti odati priznanje na odlicnom resenju (misilim na ono komplikovano), nikad se ne bih setio KeyboardFocusManager-a.
Moj problem je bio sto komponenta uopste nije reagovala na KeyEvent iako sam joj dodao KeyListener.
Radi se o JEditTextArea (highlight editor koji podrzava highlighting za java, javascript, xml, sql...) koja apsolutno ne reaguje na COPY/PASTE.
Pomocu tvog koda sam uspeo to da implementiram, medjutim javlja mi se sledeci problem:
Kad odradim PASTE (CTRL+V) sadrzaj mi se kopira dva puta.
Ako izuzetno brzo pritisnem CTRL+V onda se kopira samo jednom. Neki Thread.sleep(long) mi ne radi posao.
Da li mozda imas neko resenje za ovaj problem???
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.i-rose.si.

Sajt: b.flyingoranges.com


+117 Profil

icon Re: KeyEvent (precica na tastaturi za button)06.05.2009. u 10:31 - pre 182 meseci
Kako si napisao kod za paste?
 
Odgovor na temu

Tulex
Danguba
Novi Sad

Član broj: 170959
Poruke: 121
91.148.66.*



Profil

icon Re: KeyEvent (precica na tastaturi za button)06.05.2009. u 10:45 - pre 182 meseci
Znam na sta mislis, ali nije to jer JEditTextArea ima svoje metode copy(), cut(), paste() koje samo treba pozvati i one su ok.
Medjutim uspeo sam resiti problem na sledeci nacin:

Code:

class KeyboardHandler implements KeyEventDispatcher {

    public boolean dispatchKeyEvent(KeyEvent ke) {
        
        if (ke.getComponent() instanceof JEditTextArea) {
            JEditTextArea edit = (JEditTextArea)ke.getComponent();
            KeyStroke ks = KeyStroke.getKeyStrokeForEvent(ke);
            if(ks.getKeyEventType()==KeyEvent.KEY_PRESSED){            
                /***Copy event***/
                if (ke.getKeyCode() == KeyEvent.VK_C && ke.isControlDown()) {
                    edit.copy();
                    return true;                
                }
                /***Cut event***/
                else if (ke.getKeyCode() == KeyEvent.VK_X && ke.isControlDown()) {
                    edit.cut();
                    return true;                
                }
                /***Paste event***/
                else if (ke.getKeyCode() == KeyEvent.VK_V && ke.isControlDown()) {                                      
                    edit.paste();             
                    return true;                
                }
                /***Select All event***/
                else if (ke.getKeyCode() == KeyEvent.VK_A && ke.isControlDown()) {                    
                    edit.selectAll();
                    return true;                
                }  
                /***Unselect All event***/
                else if (ke.getKeyCode() == KeyEvent.VK_END) {                    
                    edit.selectNone();
                    return true;                
                }  
            }
        }
        return false;
    }
}

Znaci pomocu KeyStroke sam odredio da li je tip eventa PRESSED i tek onda reagovao...

Hvala ti sto si se javio...nadam se da ce i ovo nekome biti od koristi
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.i-rose.si.

Sajt: b.flyingoranges.com


+117 Profil

icon Re: KeyEvent (precica na tastaturi za button)06.05.2009. u 10:52 - pre 182 meseci
Dobro je sto ti radi, a da li si probao mozda da umesto true vratis false? U Javadocu pise da ako vratis false onda to znaci da se sledeci eventi sa tastaturom ne procesiraju, pa tako ti se nece desiti da dva puta uradi Ctrl+V

Citat:
Returns:
true if the KeyboardFocusManager should take no further action with regard to the KeyEvent; false otherwise
 
Odgovor na temu

Tulex
Danguba
Novi Sad

Član broj: 170959
Poruke: 121
91.148.66.*



Profil

icon Re: KeyEvent (precica na tastaturi za button)06.05.2009. u 11:05 - pre 182 meseci
Pokusao sam i to ali mi nije pomoglo. Verujem da se PASTE izvrsavalo na KeyEvent.PRESSED i na KeyEvent.RELEASED.
Ovako sa KeyStroke sam ga ogranicio samo na PRESSED.
Mozda nisam upravu ali cini mi se da bi to moglo biti objasnjenje.
 
Odgovor na temu

[es] :: Java :: KeyEvent (precica na tastaturi za button)

[ Pregleda: 2111 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.