我有一个 JFrame,上面有一个 JButton。单击 JButton 时,它将创建一个新框架,因此有两个可见框架。我想要的是,当我再次单击 JButton 时,而不是创建一个新的 JFrame 它只是将旧框架带到前面。
如何检查是否只会创建一个新框架?还是有其他方法?
我有一个 JFrame,上面有一个 JButton。单击 JButton 时,它将创建一个新框架,因此有两个可见框架。我想要的是,当我再次单击 JButton 时,而不是创建一个新的 JFrame 它只是将旧框架带到前面。
如何检查是否只会创建一个新框架?还是有其他方法?
那么我该如何进行检查,以便框架已经打开,没有重复,或者还有其他方法吗?
创建两个JFrame或一堆JFrame
s 不是好主意,这是通往麻烦的道路
在您需要另一个弹出窗口的情况下(真实和重要的原因),然后使用JDialog 或 JOptionPane,JDialog with setModal()
/ ModalityTypes
and with parent toJFrame
最简单的方法是获取按钮或按钮的父级来跟踪是否已创建新框架。最好的方法是保留对框架的引用。
例如。
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 很可能有更简单的方法来帮助您。因此,在选择这条道路之前,您应该探索您的选择并考虑您需要做什么。
注意。我没有测试过这段代码,它只是为了说明目的,向您展示如何设置。
boolean hasWindow = false;
if(hasWindow){
// show existing window
hasWindow = true;
} else {
// create a new window
hasWindow = true;
}
沿着这些思路。
您将可见设置为 false 仅此而已