JPanel可见性

时间:2016-07-30 12:08:38

标签: java jpanel

JPanel设置为不可见时,它仍然可以"可触摸"?就像在我的框架上有一个JPanel,面板上有按钮。如果我将面板设置为不可见,如果按下按钮所在的位置(如果它是可见的),该按钮是否仍会起作用?

我要求更好地理解setVisible实际上没有尝试实现上述内容。

2 个答案:

答案 0 :(得分:2)

当它设置为不可见时仍然有效,但是 如果您不希望它执行制作它的函数,那么请使用.Enabled方法。

答案 1 :(得分:1)

我不知道你是否测试过@Marvin Jude所说的话。但是对于我的例子,当它的父容器不可见时,该实例是不可触摸的。

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

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