如何在打开另一个JFrame时关闭当前的JFrame?

8 浏览
0 Comments

如何在打开另一个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}

0
0 Comments

关闭一个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可见时,关闭物品界面itembtnItems按钮的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的需求。如果用户遇到了问题,可以将整个代码提供给他人进行帮助和调试。

0
0 Comments

问题的原因是想要在打开一个新的JFrame时关闭之前的JFrame。提供的解决方法是使用dispose()方法关闭之前的JFrame,并通过添加ActionListener到按钮来实现。然而,这个解决方法并没有解决问题,因为点击按钮时之前的JFrame并没有关闭。另一个提供的解决方法是将这些JFrame作为面板添加到一个带有卡片布局的JFrame中,并根据点击的按钮调用card layout的next()或previous()方法来切换面板。这个方法比关闭和打开JFrame更简单。然而,问题提出者表示他有8个按钮,每个按钮都打开一个不同的JFrame,这样做可能会使代码看起来很混乱。问题的提出者也表示尝试了各种方法,但都没有成功。建议问题的提出者提供他为按钮编写的代码,如ActionListener或任何onclick事件。

0