Amigos uso NetBeans ( Swing ) gostaria de pressionar F8 e fechar o JFrame, fiz o seguinte código.
rss mais imaginam.,.não fechou… oque poderia estar errado.?
private void formKeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if (evt.getKeyCode() ==KeyEvent.VK_F8) {
this.dispose();
}
}
Obrigado a quem puder ajudar.
A sua tela tem vários componentes?
Se sim desse jeito vc vai ter que colocar um keypressed em cada componente ou fazer isso:
public class Teste extends JFrame {
private int num = 0;
public Teste(){
JButton um = new JButton("um");
um.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
num++;
System.out.println("um " + num);
}
});
JButton dois = new JButton("dois");
dois.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
num++;
System.out.println("dois " + num);
}
});
InputMap inputMap = dois.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0);
inputMap.put(enter, "teste");
dois.getActionMap().put("teste", new ClickAction(dois));
um.setBounds(10, 10, 80, 30);
dois.setBounds(90, 90, 80, 30);
add(um);
add(dois);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setSize(400, 400);
setVisible(true);
}
public class ClickAction extends AbstractAction {
private JButton button;
public ClickAction(JButton button) { this.button = button;
}
public void actionPerformed(ActionEvent e) { button.doClick();}
}
public static void main(String[] args) {
Teste teste = new Teste();
}
}
Fazer a cada componente também não é uma boa idéia.
O melhor é usar o InputMap. Basta subtituir seu código por isso aqui:
KeyStroke stroke = KeyStroke.getKeyStroke("F8");
Action actionListener = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
};
InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, "CLOSE");
rootPane.getActionMap().put("CLOSE", actionListener);
ambuzr
Agosto 12, 2008, 12:15pm
#4
valeu vini tambem tava atras dessa dica deu certin aqui no NetBeans
fiz assim, criei um metodo chamdo fechar
[code]
public void fechar(){
KeyStroke stroke = KeyStroke.getKeyStroke("F8");
actionListener = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
JOptionPane.showMessageDialog(null, “Voce apertou uma tecla”);
}
};
InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, “CLOSE”);
rootPane.getActionMap().put(“CLOSE”, actionListener);
}[/code]
então depois de initComponents coloquei assim, não esqueça de importar as classes q ele precisa o netbeans diz quais são
[code]public principal() {
initComponents();
fechar();// SO FIZ CHAMAR O METODO QUE CRIEI
}[/code]
Brigadão novamente tava doido atras dessa dica, ia colocar um KeyEvent em todos os meus botões e campos maior gambiarra
:lol:
ambuzr
Agosto 12, 2008, 7:51pm
#5
encontrei dessa forma
[code]public void verificarF8(){
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(“F8”), “fireDoFindNext”);
getRootPane().getActionMap().put(“fireDoFindNext”, new AbstractAction(“fireDoFindNext”) {
// The next two lines should be in one line
public void actionPerformed(ActionEvent evt) {
System.out.println(“F8”);
}
}
);
}
[/code]
porem como e que eu faço pra cada tecla uma ação, por exemplo, precissonar F2 mostrar System.out.println(“F2”) e precissonar F8 mostrar System.out.println(“F8”) ?
Só uma dúvida estou executando esse código do ViniGodoy, ta funcionando blz, mas se o foco estiver em uma JTable ai não funciona alguem sabe por que?
Obrigado…