Pytanie jest zawarte w poniższym prostym kodzie (komentarze):
klasa T00:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class T00 {
public static JPanel zm; //utworzenie publicznej zmiennej "referencyjnej"
public static void main(String[] args){
JFrame W = new JFrame();
JPanel P = new JPanel();
zm = P; //przypisanie referencji obiektu do zmiennej
W.getContentPane().add(P);
JButton ColorButton1 = new JButton("orange");
P.add(ColorButton1);
ColorButton1.addActionListener(new ColorButton1ActionListener());
JButton ColorButton2 = new JButton("green");
P.add(ColorButton2);
ColorButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
P.setBackground(Color.GREEN); //tu odniesienie się dp obiektu P działa
System.out.println("GREEN");
}
});
W.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
W.setSize(320,240);
W.setVisible(true);
}
}
klasa ColorButton1ActionListener:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ColorButton1ActionListener extends T00 implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
/*
*poniżej działa tylko przez publiczną zmienną referencyjną z klasy "nadrzędnej". Czy da się inaczej? Czy to zgodne ze sztuką?
*/
zm.setBackground(Color.ORANGE);
System.out.println("ORANGE");
}
}