Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果选中复选框,则将JPanel设置为可见_Java_Swing_Jpanel_Visible_Jcheckbox - Fatal编程技术网

Java 如果选中复选框,则将JPanel设置为可见

Java 如果选中复选框,则将JPanel设置为可见,java,swing,jpanel,visible,jcheckbox,Java,Swing,Jpanel,Visible,Jcheckbox,我有两门课: A组 B组 在面板A上,我得到了一个复选框,它(如果选中)应该将面板B设置为可见。到目前为止,我得到的是: public class PanelA extends JPanel { public static JCheckBox shopBox; public PanelA() { setVisible(PanelB.checkBox.isSelected()); } } 这是B组的一部分: checkBox = n

我有两门课:

  • A组

  • B组

  • 在面板A上,我得到了一个复选框,它(如果选中)应该将面板B设置为可见。到目前为止,我得到的是:

    public class PanelA extends JPanel {
    
        public static JCheckBox shopBox;
    
        public PanelA() {
            setVisible(PanelB.checkBox.isSelected());
        }
    }
    
    这是B组的一部分:

            checkBox = new JCheckBox("Show PanelA");
            add(checkBox);
            
            checkBox.addActionListener(new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent e) {
                //PanelA.setVisible(virusBox.isSelected());
            }
        });
    

    现在这不起作用了。关于
    JPanelA
    上的
    JCheckBox
    的状态,如何使
    JPanelB
    可见/不可见?

    您应该重新绘制框架

     this.repaint();
    

    下面给出了一个如何执行此操作的示例:

    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);
        }
    }
    

    如果有任何问题/疑问,请随时发表评论。

    这会有什么变化?它会重新绘制组件,因此组件将更新并显示新面板,因为错误(第“setVisible(ToolbarPanel.virusBox.isSelected();”)行的nullpointer仍然存在1)为了更快地获得更好的帮助,请添加或。硬编码数据以替换数据库。2) 使用如中所示的。第二张卡将是一个空白组件(例如,没有组件的
    JPanel
    ,或没有图标/文本的
    JLabel
    )。