1

我有一个 JFrame,上面有一个 JButton。单击 JButton 时,它将创建一个新框架,因此有两个可见框架。我想要的是,当我再次单击 JButton 时,而不是创建一个新的 JFrame 它只是将旧框架带到前面。

如何检查是否只会创建一个新框架?还是有其他方法?

4

4 回答 4

2

那么我该如何进行检查,以便框架已经打开,没有重复,或者还有其他方法吗?

于 2012-12-07T14:50:17.283 回答
0

最简单的方法是获取按钮或按钮的父级来跟踪是否已创建新框架。最好的方法是保留对框架的引用。

例如。

public class MyGUI {

    private JFrame primaryFrame;
    private JFrame secondFrame;
    private JButton someButton;

    public void setupAndDisplay() {
        // initialise the button
        someButton = new JButton("some button");
        someButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                someButtonAction();
            }
        });

        // initialise primary JFrame
        primaryFrame = new JFrame("first frame");
        primaryFrame.add(someButton);
        primaryFrame.setVisible(true);
    }

    // Like most swing stuff this method is not thread safe, as it expects to 
    // only be called on the EventDispatchThread.
    private void someButtonAction() {
        if (secondFrame == null) { // no frame created yet, so create a new one
            secondFrame = new JFrame("second frame");
            secondFrame.setVisible(true);
        } else { // already have a frame, so bring it to the front
            secondFrame.toFront(); 
        }
    }
}

这可能不是做事的最佳方式。如果您尝试做一些非常简单的事情,比如对话窗口,那么 API 很可能有更简单的方法来帮助您。因此,在选择这条道路之前,您应该探索您的选择并考虑您需要做什么。

注意。我没有测试过这段代码,它只是为了说明目的,向您展示如何设置。

于 2012-12-07T15:16:51.360 回答
0
boolean hasWindow = false;

if(hasWindow){
// show existing window
hasWindow = true;
} else {
// create a new window
hasWindow = true;
}

沿着这些思路。

于 2012-12-07T15:51:40.847 回答
-3

您将可见设置为 false 仅此而已

于 2012-12-07T14:45:07.317 回答