JPanel 可见性

JPanel visibility

JPanel 设置为不可见时,它仍然是 "touchable" 吗?例如,我的框架上有一个 JPanel,面板上有按钮。如果我将面板设置为不可见,如果我在按钮可见的地方按下,按钮是否仍然有效?

我要求更好地理解 setVisible 实际上并不是要实现上面所说的。

设置为不可见时仍然有效,但是 如果您不希望它执行它所针对的功能,请使用 .Enabled 方法。

不知道你有没有测试过@Marvin Jude说的。但是对于我的例子,当它的父容器不可见时,实例是不可触及的。

  1. 使用 panel.setVisible(true);panel.setVisible(true); 更改 JPanel 的可见性。
  2. 如果 MainPanel 不可见,则不会触发按钮的侦听器。

见下面的代码。

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.*;

    public class MyFrame extends JFrame{

        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        public MyFrame(){
            MainPanel panel = new MainPanel();
            add(panel,BorderLayout.CENTER);
            setResizable(false);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            pack();
            panel.setVisible(true);
        }

        class MainPanel extends JPanel{

            /**
             * 
             */
            private static final long serialVersionUID = 1L;
            public MainPanel(){
                JButton button = new JButton("I am a button");
                add(button);
                button.addActionListener(new ActionListener(){

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        // TODO Auto-generated method stub
                        System.out.println("JButton is clicked...");
                    }
                });
            }
        }

        public static void main(String args[]){
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    MyFrame myFrame = new MyFrame();
                    myFrame.setVisible(true);
                }
            };
            SwingUtilities.invokeLater(runnable);
        }
    }