Perchè dichiararei bottoni nei campi di istanza, e poi dichiararli di nuovo nel costruttore?
Così facendo stai ascoltando la pressione sui bottoni all'interno del costruttore. All'esterno del costruttore hai dei bottoni che non sono nemmeno inizializzati. L'if restituirà sempre falso insomma.
codice:
//Questo esempio dimostra come sia possibile non usare le classi interne per gestire gli eventi.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ColorPanelFrame{
public static void main(String[] args){
ButtonFrame frame=new ButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ButtonFrame extends JFrame{
public ButtonFrame(){
setTitle("Color Test");
setSize(Def_W,Def_H);
ButtonPanel bp=new ButtonPanel();
add(bp);
}
private static final int Def_W=400;
private static final int Def_H=300;
}
class ButtonPanel extends JPanel implements ActionListener{
private JButton yButton;
private JButton rButton;
private JButton bButton;
public ButtonPanel(){
//creo i pulsanti
yButton=new JButton("Yellow");
rButton=new JButton("Red");
bButton=new JButton("Blue");
//aggiungo i pulsanti al Panello
add(yButton);
add(rButton);
add(bButton);
//aggiungo l'oggetto listener alla sorgente dell'evento
yButton.addActionListener(this);
rButton.addActionListener(this);
bButton.addActionListener(this);
}
//Listner di azioni che imposta il colore di sfondo del Pannel
public void actionPerformed(ActionEvent e){
JButton o=(JButton)e.getSource();
if( o==yButton ){
System.out.println("Yellow button");
setBackground(Color.YELLOW);
}
else{
if( o==bButton ){
System.out.println("Blue button");
setBackground(Color.BLUE);
}
else{
if( o==rButton ){
System.out.println("Red button");
setBackground(Color.RED);
}
}
}
}
}
Sarebbe meglio indicare le variabili ad inizio classe, non al termine. Se li dichiari a prima vista non so che stai facendo su quelle variabili, è decisamente più scomodo.
Comunque esiste il costrutto else if
codice:
if(condizione) {
}
else if(altra_condizione) {
}
else if(altra_condizione) {
}
.....
else {
}