Обход создания метода-посредника - Java
Формулировка задачи:
Подскажите пожалуйста как напрямую связать кнопку и метод второй панели?
Так же интересует почему между второй панелью и и верхней гранью первой панели появляется отступ и как его убрать?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main2 {
public static void main(String[] args) {
Frame f = new Frame();
}
}
class Frame extends JFrame {
private JButton b;
private Panel p;
private boolean panelState = false;
public Frame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.p = new Panel();
this.getContentPane().add(this.p, BorderLayout.CENTER);
this.b = new JButton("button");
this.getContentPane().add(this.b, BorderLayout.NORTH);
this.b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Frame.this.panelState == false) {
Frame.this.panelState = true;
Frame.this.p.setColor(Color.black);//изменить это
System.out.println("black");
} else {
Frame.this.panelState = false;
Frame.this.p.setColor(Color.blue);//и это
System.out.println("blue");
}
}
});
this.pack();
this.setVisible(true);
}
}
class Panel extends JPanel {
private Panel2 p2;
public Panel() {
this.setPreferredSize(new Dimension(300, 200));
this.setBorder(BorderFactory.createLineBorder(Color.red));
this.p2 = new Panel2();
this.add(this.p2);
}
public void setColor(Color c) {//Убрать этого посредника
p2.setColor(c);
}
}
class Panel2 extends JPanel {
public Panel2() {
this.setPreferredSize(new Dimension(200, 100));
this.setBackground(Color.blue);
}
public void setColor(Color c) {
this.setBackground(c);
}
}Решение задачи: «Обход создания метода-посредника»
textual
Листинг программы
public Panel() {
super(new FlowLayout(FlowLayout.CENTER, 5, 0), true);