我习惯了不同的课程:一个拿着一个带按钮的主JFrame,另一个拿着一个按按钮调用的新JFrame。
if( event.getSource() == noteBtn ) { MiniPad.pad(); return;}
(MiniPad.pad()引用新JFrame上的类和pad()方法)
当我在承载该按钮的JPanel上移除all(),然后重新验证()和重新绘制(),该按钮会多次打开JFrame,这根本不是我想要它做的。
有没有办法告诉MiniPad类,在任何时候都不能打开JFrame的多个副本?顺便说一下,我扩展了JFrame,以防有帮助。
最好的解决方案是打开一个模态对话框,而不是框架。更多信息请参见多个JFrames的使用,好/坏实践?。
编辑:下面的所有内容都是有效的编程知识,但是你也可能想考虑<代码> MIPiPad >扩展<代码> jCalue类。我以前没有使用过它,但它的实现看起来很像JFrame
。在MiniPad
类中,您可能实际上不需要做太多更改。文件如下:http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html
如果你想知道为什么,请在这里查看安德鲁·汤普森的帖子。
--
根据我对你问题的理解,MiniPad
扩展了JFrame
,而pad()
方法创建了MiniPad
类的一个新实例。最简单的解决方案是将MiniPad
类(至少通过pad()
方法)转换为单例。singleton是一种在任何给定时间只能存在一个实例(或对象)的类。通过调用静态方法(在本例中为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
问题内容: 现在的示例中,我有一个包含jtable的主框架,显示所有客户信息,并且有一个create按钮来打开一个新的JFrame,允许用户创建新客户。我不希望用户可以打开多个创建框架。任何swing组件或API都能做到吗?或如何禁用主机?类似于JDialog。 问题答案: 我建议您将新客户对话框设置为模态,以便在应用程序可见时,不允许其他对话框/框架中的输入。请查看模态教程以了解详细信息。
问题内容: 我试图在弹出新框架时禁用“主” 。我想要它,所以您不能在该框架上单击或拖动任何东西。我尝试将新框架设为a ,但这并没有禁用其他框架。我还查看了有关此的另一篇文章,建议将其设置为a,但仍然无法正常工作。我真的需要帮助。谢谢。这是我正在使用的代码,他们有什么问题吗? 代表“主”框架。 问题答案: 您已经设置了JDialog#setModal或JDialog#ModalityTypes,可能
我有一个问题,就是在一次单击一个按钮的过程中处理两个JFrames。我有2个JFrames(SUC_Forms和add_suc),当SUC_Forms中的按钮“Add Records”被点击时,将显示另一个新的JFrame,它是add_suc JFrame,包含注册/归档的文本框。当我按ok验证并插入数据库中的所有数据时,将弹出一个JDialogbox进行确认。当我点击“OK”后,两个JFrame
问题内容: 我有一个主JFrame,其中具有用于不同功能的各种面板,人们可以在其中进行计算。我想在用户单击第一个计算按钮时打开一个新的JFrame并用作“输出”窗口(如果您熟悉它们,则类似于SPSS输出窗口)。 New JFrame将是完全独立的,并且将具有其自己的菜单栏。简单的JDialog并不是解决之道。 问题答案: 无法抗拒,简单地不同意答案); 和 我想在用户单击第一个计算按钮时打开一个新
我在网上查看了如何从现有的JFrame打开一个新的JFrame。我发现,最好的方法显然是处理现有的JFrame,然后打开新的JFrame--但这是一个问题。 我有一个登录表单,一个用户登录,登录框架被处理,主框架被设置为可见。 但是,如果用户启动客户端,然后决定不登录并关闭它,则进程仍在后台运行? 我觉得这是一个非常愚蠢的问题,如果是这样,我很抱歉,但我已经四处寻找,找不到任何解决办法。我可以不处
我在下面定义的