如何在打开另一个JFrame时关闭当前的JFrame?
如何在打开另一个JFrame时关闭当前的JFrame?
我有一个框架(main),里面有两个按钮:Items和Sale。\n当我点击按钮Items时,它会打开一个Items框架。\n当我点击按钮Sale时,我想要关闭Items框架并打开Sale框架。\n这是Items框架的代码:\npublic class Items extends JFrame {\npublic static void main(String[] args) {\n EventQueue.invokeLater(new Runnable() {\n public void run() {\n try {\n Items frame = new Items();\n frame.setVisible(true);\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n });\n}\n}\n更新:这是我的Sale类的代码:\npublic class Sale extends JFrame {\npublic static void main(String[] args) {\n EventQueue.invokeLater(new Runnable() {\n public void run() {\n try {\n Sale frame = new Sale();\n frame.setVisible(true);\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n });\n}\n}
关闭一个JFrame同时打开另一个JFrame是一个常见的需求。在上述问题中,用户想要实现在点击按钮时关闭当前的JFrame,并打开另一个JFrame。以下是问题的解决方法。
解决方法:
在按钮的ActionListener中使用.dispose();
方法来关闭当前的JFrame实例。如果你的类继承了JFrame,那么.dispose();
将关闭当前的JFrame实例。具体的解决方法如下所示:
public class Main extends JFrame { public Main() { Sale sale = new Sale(); Items item = new Items(); JButton btnSale = new JButton("Sale"); getContentPane().add(btnSale, BorderLayout.WEST); JButton btnItems = new JButton("Items"); getContentPane().add(btnItems, BorderLayout.CENTER); btnSale.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sale.setVisible(true); if(item.isVisible()) { item.dispose(); } } }); btnItems.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { item.setVisible(true); if(sale.isVisible()) { sale.dispose(); } } }); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main frame = new Main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } }
在上述代码中,通过添加按钮的ActionListener来监听按钮的点击事件。当按钮被点击时,会根据需要打开或关闭JFrame。btnSale
按钮的ActionListener中,当销售界面sale
可见时,关闭物品界面item
。btnItems
按钮的ActionListener中,当物品界面item
可见时,关闭销售界面sale
。
这样,当用户点击按钮时,当前的JFrame将会被关闭,同时另一个JFrame将会被打开。
上述解决方法中,使用了.dispose()
方法来关闭JFrame实例。在问题中,一位用户遇到了一些问题,他在主界面输入sale
时,没有得到dispose()
方法的建议。这可能是因为他的Sale类没有继承JFrame。如果没有继承JFrame,用户可以通过调用Sale类的frame来关闭JFrame,例如sale.frame.dispose();
。同时,要确保在Sale类中将frame设置为“public”,以便在Main类中可以使用。
此外,用户还提到他在if()条件中输入Items.dispose();
时出现错误。这是因为他尝试在main方法中调用dispose()。在上述解决方法中,监听器和关闭JFrame的操作在类构造函数中,即在public static void main方法之外。
最后,用户还提到他的Items类在输入“Items.”后没有得到任何建议。这可能是由于他在main方法中输入了Items.dispose()。正确的做法是将监听器和关闭JFrame的操作放在类构造函数中,而不是main方法中。
通过上述解决方法,用户可以实现在关闭一个JFrame的同时打开另一个JFrame的需求。如果用户遇到了问题,可以将整个代码提供给他人进行帮助和调试。
问题的原因是想要在打开一个新的JFrame时关闭之前的JFrame。提供的解决方法是使用dispose()方法关闭之前的JFrame,并通过添加ActionListener到按钮来实现。然而,这个解决方法并没有解决问题,因为点击按钮时之前的JFrame并没有关闭。另一个提供的解决方法是将这些JFrame作为面板添加到一个带有卡片布局的JFrame中,并根据点击的按钮调用card layout的next()或previous()方法来切换面板。这个方法比关闭和打开JFrame更简单。然而,问题提出者表示他有8个按钮,每个按钮都打开一个不同的JFrame,这样做可能会使代码看起来很混乱。问题的提出者也表示尝试了各种方法,但都没有成功。建议问题的提出者提供他为按钮编写的代码,如ActionListener或任何onclick事件。