Java 用按钮关闭JFrame
我目前正在使用Eclipse的拖放功能,我有一个应用程序窗口,默认情况下它附带JFrame,并且能够Java 用按钮关闭JFrame,java,eclipse,jframe,jpanel,Java,Eclipse,Jframe,Jpanel,我目前正在使用Eclipse的拖放功能,我有一个应用程序窗口,默认情况下它附带JFrame,并且能够setVisible(false)但是我用JPanel和扩展JFrame创建的其他框架/面板/窗口 由于extend的原因,我无法设置可见(false或true)它对窗口没有任何影响,但仍然为真 我的代码: private JPanel contentPane; /** * Launch the application. */ public static void main(String[]
setVisible(false)代码>但是我用JPanel和扩展JFrame创建的其他框架/面板/窗口
由于extend
的原因,我无法设置可见(false或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);
}
});
有什么解决办法吗 因为您是在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,而不声明LibraryMenu的新实例:
btnLogout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});
因为您正在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,而不声明LibraryMenu的新实例:
btnLogout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});
发生这种情况是因为每次按下按钮都会创建该帧的新实例。以下是您的代码更新:
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);
}
});
发生这种情况是因为每次按下按钮都会创建该帧的新实例。以下是您的代码更新:
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);
}
});
请发布一个可编译的示例,因为您的代码中甚至没有类定义。无论哪种方法,您都需要在调用setVisible(false)
的同一引用上调用setVisible(true)
,而不是在引用新创建对象的引用上。不要在onClick中创建Library菜单,在主类中将其创建为字段,然后使用setVisible to false。单击按钮时,您正在另一个菜单中创建,因此第一个菜单将保持不变。SwingUtilities.windowForComponent(btnLogout).setVisible(false)
?请发布一个可编译的示例,因为您的代码中甚至没有类定义。无论哪种方法,您都需要在调用setVisible(false)
的同一引用上调用setVisible(true)
,而不是在引用新创建对象的引用上。不要在onClick中创建Library菜单,在主类中将其创建为字段,然后使用setVisible to false。当点击按钮时,您正在创建另一个菜单,因此第一个菜单仍然存在。SwingUtilities.windowForComponent(btnLogout)。setVisible(false)
?@nixstatic
是一种“看起来”不错的解决方案,但它会让您成为一个黑暗的盟友,毫无意义地打败您并偷走您的钱包,一切都井然有序,最好是avoided@nixstatic
是一种“看起来”不错的解决方案,但它会把你引向一个黑暗的盟友,把你打得毫无知觉,偷走你的钱包,一切都井然有序,最好是这样avoided@nix如果这解决了您的问题,请将答案标记为正确。谢谢:)@nix如果这解决了您的问题,请将答案标记为正确。谢谢:)