只关闭一个Jframe窗口



我有一个纸牌程序,其中包含两个不同的游戏。要访问游戏,我有一个菜单栏,里面有一个包含地毯纸牌和时钟纸牌的游戏菜单。

默认情况下,程序在"地毯式纸牌"中启动,我想选择"游戏"->"时钟纸牌",然后弹出一个带有时钟纸牌的新窗口,并关闭旧的"地毯式单人纸牌"窗口。

目前,我的程序将打开时钟窗口,但不会关闭旧的地毯窗口。

public void clockGame() {
    JButton[] buttons = {
            new JButton("Close"), new JButton("New Game")
    };
    final JDialog     dialog     = new JDialog(GUI, "Click a button");
    final JOptionPane optionPane = new JOptionPane("Would you like to start a new game of Clock Solitaire?", JOptionPane.INFORMATION_MESSAGE, JOptionPane.INFORMATION_MESSAGE, null, buttons, buttons[1]);
    buttons[0].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            dialog.setVisible(false);
        }
    });
    buttons[1].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // What can I put here to close the Carpet Window
            new ClockSolitaire(); 
            dialog.setVisible(false);
        }
    });
    dialog.setContentPane(optionPane);
    dialog.pack();
    dialog.setLocationRelativeTo(GUI);
    dialog.setVisible(true);
}

我可以向第二个actionPerformed添加什么以便关闭旧窗口?

当通常需要更大的灵活性时,让类扩展JFrame,迫使您创建和显示JFrame是在把自己描绘成一个角落。更好的解决方案是:不要交换JFrame。相反,创建JPanel并显示它们,并使用CardLayout在一个JFrame中交换它们。

如果你想使用一个JFrame,那么你可以创建一个私人JPanel,根据他选择的游戏重新绘制它。。。

否则,如果只需要2个JFrame,则需要为每个JFrame创建一个引用变量。这意味着你需要为每次点击删除"新JFrame",这样你就可以控制它

在我的情况下,我会这样做;

private JFrame clockSolitaireFrame;

ClockSolitaire类将使用clockSolitare变量来显示UI,并使用该变量来能够在将来关闭帧。代码看起来与此类似;

    buttons[1].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        clockSolitaireFrame.dispose();
        new ClockSolitaire(); 
        dialog.setVisible(false);
    }
});

相关内容

  • 没有找到相关文章

最新更新