Algueim tem um método simples de vc clicando em um botao e ele abrindo uma tela?
Obrigado
Fiz um aqui … da uma olhada
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Frame extends JFrame {
//cria um botão para abtir a nova janela
private JButton botao;
//construtor da classe
public Frame(){
//seta o titulo da janela
super("Interface grafica");
//seta o layout do frame
setLayout(new FlowLayout());
botao = new JButton("Teste teste");
//cria um handle para tratar o evento de botao
EventoBotao handler= new EventoBotao();
this.add(botao);
botao.addActionListener(handler);
}
//classe interna para tratar o evento de botao
private class EventoBotao implements ActionListener{
public void actionPerformed(ActionEvent e) {
//cria um novo frame
JFrame j = new JFrame();
j.setTitle("Nova janela");
j.setSize(200, 200);
//deixa o frame visivel
j.setVisible(true);
}
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Frame f = new Frame();
f.setVisible(true);
f.setSize(200, 200);
}
}
A classe main cria um frame , nele existe um botão , clicando nele vc dispara um evento que e tratado na classe interna EventoBotao implements ActionListener que implementa o metodo action Performed , nele nos tratamos o evento , neste caso apenas criamos um objeto j que representa um novo frame , ai ele abre uma outra janela…
vlw vou testar aqui agora mesmo!
perfeito deu para intender claramente como funciona mas e se eu no caso quando apertar um F2 que seria um case: 113 eu implemento o actionlistener dentro do case?
ex:
switch(Integer.parseInt(tecla[1]))
{
case 112: //F1
JOptionPane.showMessageDialog(null, "Pressionou o botao F1");
break;
perfeito era isso mesmo consegui vlw pela forca amigo
epa mas falto uma coisa, tipo eu tenho o metodo de capturar o botao F1, tambem tenho o metodo de AO clicar no botao F1, mas falto uma coisa um meio de selecionar o botao AO clicar no F1, pq ele captura a tecla e abre o evento mas nao seleciona o botao… entenderam? qqr coisa tento explicar melhor!
algueim?
não entendi o que vc quer faer…
Sugestão: faça suas ações SOMENTE no ActionListener do BOTÃO. No KeyListener, faça algo como:
switch (e.getKeyCode()) {
case KeyEvent.F1:
botaoF1.doClick(); // se seu botão se chamar F1
break;
}
Com isso você concentra todos os eventos somente nos botões.
A ideia e praticamente a mesma do evento de botao , criei uma classe interna que implementa keyListneer para ouvir o evento de teclado
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Frame extends JFrame {
//cria um botão para abtir a nova janela
private JButton botao;
//construtor da classe
public Frame(){
//seta o titulo da janela
super("Interface grafica");
//seta o layout do frame
setLayout(new FlowLayout());
botao = new JButton("Abrir nova janela");
//cria um handle para tratar o evento de botao
EventoBotao handler= new EventoBotao();
//cria um handle para tratar o evento de teclado
EventoTeclado handlerTeclado = new EventoTeclado();
this.add(botao);
//nao se esqueça de tirar o foco do botao
botao.setFocusable(false);
botao.addActionListener(handler);
//adicionar o ouvidor de evento ao jframe
addKeyListener(handlerTeclado);
}
//classe interna para tratar o evento de teclado
private class EventoTeclado implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case 112: //f1
JOptionPane.showMessageDialog(null, "Pressionou o botao F1");
break;
default:
break;
}
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
}
//classe interna para tratar o evento de botao
private class EventoBotao implements ActionListener {
public void actionPerformed(ActionEvent e) {
//cria um novo frame
JFrame j = new JFrame();
j.setTitle("Nova janela");
j.setSize(200, 200);
//deixa o frame visivel
j.setVisible(true);
}
}
}
A main pode ser a mesma do meu codigo postado acima … so um detalhe os metodos não da classe EventoTeclado não foram implentados , mas eles são necessarios para compilar o codigo , pois quando vamos implementar uma interface temos que implementar todos seus metodos …
Qualquer duvida posta ai …flw