Java/Swing/Eventos e Action listeners: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Albmont (discussão | contribs)
m ru: (contador de corvos)
Albmont (discussão | contribs)
Código object-oriented
Linha 7:
 
<source lang="java">
// inicio do programaarquivo swing_button_1 - versao 0.0java
// inicio do programa swing_button - versao 1.0
 
import javax.swing.*; //All swing components live
Linha 48 ⟶ 49:
}
}
// fim do programa swing_button_1swing_button - versao 01
</source>
 
Linha 72 ⟶ 73:
 
<source lang="java">
// inicio do programa swing_button_1 - versao 0.1java
// inicio do programa swing_button - versao 1.1
 
import javax.swing.*; //All swing components live
Linha 123 ⟶ 125:
}
}
// fim do programa swing_button_1swing_button - versao 01.1
</source>
Linha 137 ⟶ 139:
</source>
porque o compilador dá erro, com uma mensagem incompreensível (''Cannot refer to a non-final variable entry1 inside an inner class defined in a different method'').
 
== Solução orientada a objetos ==
A solução para este programa está em reescrever a classe ''swing_button_1'' de forma a aproveitar as vantagens da [[programação orientada a objetos]].
 
Assim, teremos uma classe ''swing_button_2'' que, em vez de conter apenas um ''main'' e fazer tudo usando variáveis locais do ''main'', é, ela própria, uma classe do Swing.
 
Por exemplo, quase todos ''widgets'' que foram criados no ''main'' podem se tornar ''membros'' da classe swing_button_2, sendo esta uma subclasse do ''widget'' principal.
 
Um esboço da reorganização, com o código que mostra os widgets mas não faz nada, seria:
 
<source lang="java">
// programa swing_button_2.java
// inicio do programa swing_button - versao 2.0
 
import javax.swing.*; //All swing components live
//in the javax.swing package
 
import java.awt.*;
import java.awt.event.*;
 
// a classe swing_button_2 antes era subclasse de Object
// agora, torna-se subclasse de JFrame
public class swing_button_2 extends JFrame {
 
// os widgets que eram criados no main
// agora são membros da classe
static Box vbox;
static JButton button1;
static JTextField entry1;
 
public static void main(String[] args) {
 
// o frame é criado no main (como antes)
// a diferença é que chamamos o constructor da classe
// este constructor se encarrega de montar vbox, button1 e entry1
swing_button_2 frame = new swing_button_2("swing_button_2");
 
// o resto é igual
frame.add(vbox);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(212, 258);
frame.setVisible(true);
}
 
// o trabalho de criar os widgets vbox, button1 e entry1 é feito no constructor da classe
public swing_button_2(String title) {
 
// super chama o constructor da classe JFrame
super(title);
// o resto é igual
vbox = new Box(BoxLayout.Y_AXIS);
button1 = new JButton("OK");
entry1 = new JTextField("");
 
vbox.add(button1);
vbox.add(entry1);
 
}
}
// fim do programa swing_button - versao 2.0
</source>