Boa noite, estou com uma duvida simples…para criar um Listener tenho que criar uma classe, ok…mas eu queria saber se posso criar uma classe com o nome Eventos e dentro dela criar varios metodos que serao os listeners.
Por exemplo, tenho 5 botoes, cada um faz uma ação, entao soh preciso criar uma classe com metodos por exemplo pra fechar um Frame, pra fazer uma conta, pra minimizar, pra deixar fullscreen, pra limpar a tela…entenderam? entao, é possivel fazer isso ou tenho que criar uma classe pra cada ação?
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Tela extends JFrame {
JButton b1 = new JButton("B1");
JButton b2 = new JButton("B2");
JButton b3 = new JButton("B3");
JButton b4 = new JButton("B4");
public Tela(){
this.ajustaTela();
this.addElementos();
this.addActionListeners();
}
private void addActionListeners() {
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exibeMensagem("Você clicou no botão b1");
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exibeMensagem("Você clicou no botão b2");
}
});
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exibeMensagem("Você clicou no botão b3");
}
});
b4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exibeMensagem("Saindo");
dispose();
}
});
}
private void exibeMensagem(String texto){
//Ao invés de vc chamar esse método no seu action listener, vc pode chamar
//métodos de outras classes.
JOptionPane.showMessageDialog(this, texto);
}
private void addElementos(){
getContentPane().add(b1);
getContentPane().add(b2);
getContentPane().add(b3);
getContentPane().add(b4);
}
private void ajustaTela(){
setSize(200, 200);
setLocationRelativeTo(null);
setLayout(new GridLayout(2, 2));
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Tela();
}
}
Eu sempre crio os actionlisteners na mesma classe em que está o meu botão, se precisar chamo um método dentro deles ou até mesmo um método que esteja em outra classe.
Para mim vai ficar mais bagunçado, pq vc terá de fazer essa classe implementar a interface ActionListener, criar um método e enchê-lo de if para testar qual botão seu foi clicado, exatamente o mesmo se sua tela implementasse o ActionListener.
Seu código vai ficar meio espagueti (cheio de if) e vc vai criar uma classe para ter, basicamente, um método.
Mas sim, se mesmo assim vc quiser fazer é possível embora “feio”. :lol:
Seliaj, o seu modo parece resolver meu problema, mas é muito avançado para o meu nível, kkkkk…
Axo que vou tentar fazer tudo na mesma classe msm, porem vou encontrar o problema de n poder criar um metodo pra cada Listener, pois devem ter o nome actionPerformed, estou pensando num jeito
Jailes obrigado, agora posso resolver meu problema, agradeço a todos que colaboraram!
Agora eu possuo um outro problema, eu fiz um evento que por sua vez acaba adicionando um outro botão na tela, e ao clicar nesse botao ele deve realizar um verificação(if/else) com uma variavel que esta dentro do primeiro evento, porem nao consigo realizar, quando cito a variavel dentro desse otro evento, o NetBeans me da um erro:
[color=red]local variable idade is accessed from within inner class; needs to be declared final[/color]
Desculpem-me, ja consegui resolver este erro anterior, más agora infelizmente tenho outro, eu estou pegando dados Strings de 4 JTextFields, e um botao tem que pegar esses dados e mostrar em algum campo, tentei mostar em um JTextField ampliado, mas fica tudo escrito na mesma linhas, msm usando o \n…alguem poderia me dizer qual o componente mais apropriado para realizar essa exposição dos dados?
Entao, tentei usar, e ta dando varios erros, eu executo, e da erro…da uma olhad anos erros:
[color=blue]run:[/color]
[color=red]Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at SwingApp.Form$1.actionPerformed(Form.java:59)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)[/color]
[color=green]CONSTRUÍDO COM SUCESSO (tempo total: 7 segundos)[/color]
OBS: estou usando esse comando para transformar um valor String em Int, sera que é isso?
int idade=Integer.parseInt(campo[2].getText());
Percebi que se eu comento essa linha, tudo funciona normalmente…alias, esta linha esta dentro de um evento, onde faz algumas verificações, e acaba por pegar um valor String numa area de texto e converte-lo em numerico(onde uso esse comando).