Обход создания метода-посредника - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5