java - 按钮多次打开新的 JFrame。我该如何阻止呢?

标签 java swing window jframe jpanel

我正在使用不同的类:一个包含一个带有按钮的主 JFrame,另一个包含一个在按下按钮时调用的新 JFrame。

if( event.getSource() == noteBtn ) { MiniPad.pad(); return;}

(MiniPad.pad() 引用新 JFrame 上的类和 pad() 方法)

当我在托管按钮的 JPanel 上使用 removeAll(),然后使用 revalidate() 和 repaint() 时,按钮多次打开 JFrame,这根本不是我想要的。

有没有办法告诉 MiniPad 类您不能同时打开多个 JFrame 副本?顺便说一句,我扩展了 JFrame,以防有任何帮助。

最佳答案

编辑:以下所有内容都是有效的编程知识,但您可能还想考虑让 MiniPad 扩展 JDialog 类。我以前没有用过它,但它的实现看起来很像JFrame。实际上,您可能不必在 MiniPad 类中进行太多更改。文档在这里:http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html

如果您想知道为什么,请查看 Andrew Thompson 的帖子 here .

--

根据我对你问题的理解,MiniPad 扩展了 JFramepad() 方法创建了 的新实例>MiniPad 类。最简单的解决方案是将 MiniPad 类(至少通过 pad() 方法)变成单例。单例是一种在任何给定时间只能存在一个实例(或对象)的类。通过调用静态方法(在本例中为 pad()),您可以检查该对象的实例是否已经存在;如果是这样,只需使用该现有对象:

public class MiniPad extends JFrame {

    //whatever code you have

    private static MiniPad padInstance = null; //the singleton instance of your MiniPad

    public static MiniPad pad() {
        if(padInstance == null)
            padInstance = new MiniPad();
        //If you want to reset the object every time you call the method for whatever reason, do it here
        pad.setVisible(true); // I believe this is all you want to do
    }
}

这应该做你想做的。通过调用 pad() 方法,只会出现一个 MiniPad

但是,如果我读错了你的问题,请告诉我,我会修改我的答案。

关于单例的信息: http://en.wikipedia.org/wiki/Singleton_pattern

关于java - 按钮多次打开新的 JFrame。我该如何阻止呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951123/

相关文章:

java - 创建自定义 JFrame

c++ - 由 CreateEx() 创建的子窗口被兄弟窗口重叠

javascript - 使用 JQuery 创建父窗口对象的正确方法是什么

java - androidcameraX API亮度问题

java - 在java中解析google geocode结果 - 找不到JSONArray [0](它在那里)

java - 如何选择Selenium WebDriver中li里面的 anchor 标签?

javascript - 鼠标悬停时图像位于图像顶部

java - 当您丢弃对 SoftReference 的引用时,它的清除仍会放在 ReferenceQueue 上吗?

java - TableCellRenderer 工作正常,表格排序正常,但不重新绘制

java - 检测多次双击/重置 MouseEvent?