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

时间:2018-09-18 05:48:52

标签: java swing jframe

我有一个框架(main)。有两个按钮:“项目”和“销售”。

当我单击按钮Items时,它会打开一个框架(Items) 我想当我点击按钮Sale时,它应该关闭Items并打开Sale

这是Items帧:

public class Items extends JFrame {

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Items frame = new Items();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
}

更新:-这是我的特卖班

public class Sale extends JFrame {
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Sale frame = new Sale();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
}

2 个答案:

答案 0 :(得分:0)

只需使用dispose()方法关闭上一个Item JFrame。

salesframe.setVisible(true);
itemframe.dispose();

就您而言,我认为您还应该在按钮上添加一个ActionListener。

jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
       frameToClose.dispose();
    }
});

答案 1 :(得分:0)

您应该.dispose();按钮ActionListener中的框架,由于要在类中扩展JFrame,这意味着您.dispose();实例本身。像这样:

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() {

            @Override
            public void actionPerformed(ActionEvent e) {

                sale.setVisible(true);
                if(item.isVisible()) {
                    item.dispose();
                }

            }
        });

        btnItems.addActionListener(new ActionListener() {

            @Override
            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();
                }
            }
        });
    }

}