【问题标题】:JPanel visibilityJPanel 可见性
【发布时间】:2016-12-05 01:18:11
【问题描述】:

JPanel 设置为不可见时,它是否仍然“可触摸”?例如,我的框架上有一个JPanel,面板上有按钮。如果我将面板设置为不可见,如果我按下按钮所在的位置,如果它是可见的,那么该按钮是否仍然有效?

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

【问题讨论】:

  • 你为什么不自己测试一下?
  • @Flown 我明白你为什么这么说。我确实尝试过几次测试,我只是想重申我的结果。 Marvin Jude 的回答让我能够确保面板的功能不会在面板不可见的情况下启用。

标签: java jpanel


【解决方案1】:

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

【讨论】:

  • 谢谢!我从没想过使用 .enabled 方法!
【解决方案2】:

我不知道您是否测试过@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);
        }
    }

【讨论】:

  • 是的,我测试过它,它确实有效。我有点用他作为冗余措施。至于你所说的,现在我明白了它是如何工作的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多