Установить JPanel видимым, если установлен флажок - PullRequest
0 голосов
/ 20 марта 2020

У меня есть два класса:

1) Панель A

2) Панель B

На панели A у меня есть флажок, который (если выбран) должен установить Панель B видна. Это то, что я получил до сих пор:

        public class PanelA extends JPanel {

        public static JCheckBox shopBox;

        public PanelA() {
            setVisible(PanelB.checkBox.isSelected());
    }
}

И это часть JPanel B:

        checkBox = new JCheckBox("Show PanelA");
        add(checkBox);

        checkBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            //PanelA.setVisible(virusBox.isSelected());
        }
    });

Теперь это не работает. Как сделать JPanelB видимым / невидимым в отношении состояния JCheckBox на JPanelA ??

Приветствия

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Ниже приведен пример того, как это сделать:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

class PanelA extends JPanel implements ActionListener {
    private JCheckBox shopBox;
    private PanelB panelB;

    PanelA() {
        shopBox = new JCheckBox();
        shopBox.addActionListener(this);
        add(shopBox);
        setSize(100, 100);
    }

    public PanelB getPanelB() {
        return panelB;
    }

    public void setPanelB(PanelB panelB) {
        this.panelB = panelB;
        this.panelB.setVisible(shopBox.isSelected());
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == shopBox) {
            panelB.setVisible(shopBox.isSelected());
        }
    }
}

class PanelB extends JPanel {
    PanelB() {
        setSize(100, 100);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }
}

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(1000, 1000);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout());
        PanelA pa = new PanelA();
        PanelB pb = new PanelB();
        frame.add(pa);
        frame.add(pb);
        pa.setPanelB(pb);
        frame.setVisible(true);
    }
}

Не стесняйтесь комментировать в случае любой проблемы / сомнения.

0 голосов
/ 20 марта 2020

Вы должны перекрасить рамку

 this.repaint();
...