当JPanel
设置为不可见时,它仍然可以"可触摸"?就像在我的框架上有一个JPanel
,面板上有按钮。如果我将面板设置为不可见,如果按下按钮所在的位置(如果它是可见的),该按钮是否仍会起作用?
我要求更好地理解setVisible
实际上没有尝试实现上述内容。
答案 0 :(得分:2)
当它设置为不可见时仍然有效,但是 如果您不希望它执行制作它的函数,那么请使用.Enabled方法。
答案 1 :(得分:1)
我不知道你是否测试过@Marvin Jude所说的话。但是对于我的例子,当它的父容器不可见时,该实例是不可触摸的。
panel.setVisible(true);
或panel.setVisible(true);
更改JPanel的可见性。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);
}
}