Alguem saberia como eu faço para numa aplicação swing, em dado momento verificar se o usuário esta com uma tecla pressionada (ctrl no caso)?
pesquisando na internet achei muita coisa relacionada a addKeyListener e KeyAdapter, mas nen é meu caso de fazer evento e tratar quando ele apertar, meu caso é de naquela hora ver se esta apertado e pronto…
porque preciso disso?
tenho um tanto de botão multi-selecionáveis, e to colocando uma pequena funcionalidade de quando o usuário só passar o mouse sobre ele (addMouseListener - MouseAdapter - mouseEntered… ), se o ctrl tiver apertado, ele já seleciona… só mesmo para poupar clique do usuário…
Só se você adicionar um listener é que poderá saber se a tecla está ou não pressionada…
D
Danieldt
poizé… mas será que é o único jeito?
porque na verdade na hora que tenho que verificar, já estou dentro de outro listener… o do mouseEnter… ai precisaria de um jeito só de verificar naquela hora mesmo, sem tratar como evento…
E
entanglement
Um MouseEvent (que é o objeto recebido por vários métodos do MouseAdapter) é derivado de InputEvent, e um InputEvent tem métodos que permitem determinar se a tecla Ctrl, Shift ou Alt está pressionada.
C
charleston10
Não se vai te ajudar, mas de uma pesquisada na Classe Robots
packageguj;importjava.awt.EventQueue;importjavax.swing.JFrame;importjavax.swing.BoxLayout;importjavax.swing.JLabel;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;publicclassExemploMouseEventComTeclaCtrlextendsJFrame{privateJLabellblCliqueAqui;privateJLabellblATeclaShift;privateJLabellblATeclaCtrl;privateJLabellblATeclaAlt;/** * Launch the application. */publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){publicvoidrun(){try{ExemploMouseEventComTeclaCtrlframe=newExemploMouseEventComTeclaCtrl();frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}}});}/** * Create the frame. */publicExemploMouseEventComTeclaCtrl(){setBounds(100,100,450,122);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().setLayout(newBoxLayout(getContentPane(),BoxLayout.Y_AXIS));getContentPane().add(getLblCliqueAqui());getContentPane().add(getLblATeclaShift());getContentPane().add(getLblATeclaCtrl());getContentPane().add(getLblATeclaAlt());}privatevoidshowCtrlAltShiftKeys(MouseEvente){System.out.println(e);if(e.isAltDown())getLblATeclaAlt().setEnabled(true);elsegetLblATeclaAlt().setEnabled(false);if(e.isShiftDown())getLblATeclaShift().setEnabled(true);elsegetLblATeclaShift().setEnabled(false);if(e.isControlDown())getLblATeclaCtrl().setEnabled(true);elsegetLblATeclaCtrl().setEnabled(false);}privateJLabelgetLblCliqueAqui(){if(lblCliqueAqui==null){lblCliqueAqui=newJLabel("Passe o mouse sobre este JLabel aqui...");lblCliqueAqui.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseEntered(MouseEvente){showCtrlAltShiftKeys(e);}@OverridepublicvoidmouseExited(MouseEvente){showCtrlAltShiftKeys(e);}});}returnlblCliqueAqui;}privateJLabelgetLblATeclaShift(){if(lblATeclaShift==null){lblATeclaShift=newJLabel("A tecla Shift está pressionada");lblATeclaShift.setEnabled(false);}returnlblATeclaShift;}privateJLabelgetLblATeclaCtrl(){if(lblATeclaCtrl==null){lblATeclaCtrl=newJLabel("A tecla Ctrl está pressionada");lblATeclaCtrl.setEnabled(false);}returnlblATeclaCtrl;}privateJLabelgetLblATeclaAlt(){if(lblATeclaAlt==null){lblATeclaAlt=newJLabel("A tecla Alt está pressionada");lblATeclaAlt.setEnabled(false);}returnlblATeclaAlt;}}
Este exemplo só não é muito perfeito, porque quando você solta a tecla Shift, Ctrl ou Alt e o mouse está fora ou dentro do JLabel, o status não é atualizado (seria necessário também associar KeyListeners a essas teclas). Mas para o que você quer acho que está bom
D
Danieldt
É isso mesmo cara! valeu… o entanglement tinha acabado de postar a dica tambem… valeu pros dois ae… resolvido o prob