我目前正在使用Eclipse的拖放功能,我有一个默认情况下附带JFrame的应用程序窗口,能够setVisible(false);
但是我用JPanel和扩展的JFrame创建的其他框架/面板/窗口。
由于extend
我无法setVisible(false or true);
它在窗口上完全没有效果,它仍然是真的。
我的代码:
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LibrarianMenu frame = new LibrarianMenu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LibrarianMenu() {
setTitle("Librarian");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 385, 230);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
.
.
. so on
我试图执行我的按钮:
btnLogout.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
LibrarianMenu frame = new LibrarianMenu();
frame.setVisible(false);
}
});
任何解决方案吗?
答案 0 :(得分:3)
因为您在Runnable中创建了框架,所以它的范围仅限于runnable的范围。尝试在runnable之外声明变量,然后在runnable中初始化它,如下所示:
private JPanel contentPane;
private LibrarianMenu frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new LibrarianMenu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
然后setvisible为false而不声明LibrarianMenu的新实例:
btnLogout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});
答案 1 :(得分:2)
这种情况正在发生,因为每次按下按钮都会创建该框架的新实例。这是您的代码更新:
static LibrarianMenu frame ;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new LibrarianMenu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
注销按钮事件应该是这样的:
btnLogout.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});