JFrame in Java

5
我正在使用JFrame作为主框架的弹出窗口,用户需要输入一些信息然后按下OK。但问题是,一旦打开了这个子框架,我希望程序忽略任何其他信号直到按下OK按钮,类似于JOptionPanes的方式。现在的情况是,您可以点击按钮多次以打开子框架,从而获得多个框架,这不是意图(它甚至会导致很多错误)。
我可以通过一个布尔值来解决它,一旦按下OK按钮就为true,但这似乎不是修复它的好方法。我感觉必须有其他方法来做到这一点,因为我可以看到从我的JOptionPanes中得到的效果,但无法实现。
干杯。

Mats_SX来自瑞典?你不会碰巧在Paradox论坛上吧? - Michael Myers
我非常喜欢。经常浏览OT和eu2板块 :) - Mats_SX
那你已经认识我了(我在那里使用名字而不是姓氏)。 - Michael Myers
啊哈!是的,我会。好的,那么我们在那边见咯,呵呵:D - Mats_SX
2个回答

10
你需要一个使用JDialog并设置modal = true的对话框。根据Javadocs文档:

modal - 指定当显示对话框时,是否阻止用户输入其他顶级窗口。


那么我不能使用JFrame来完成这个任务吗? - Mats_SX
2
不容易。但是在这里使用JFrame的真正原因并不充分;一个JDialog几乎可以做到JFrame所能做的任何事情,只是操作系统没有将其视为完整的窗口。JDialog就是为此而设计的(只是一个收集一些输入的小窗口)。 - Michael Myers
我会记住的。问题的细节是这是一个学校项目,而我碰巧是项目经理。我自己没有编写那段代码,只是不得不处理它引起的错误哈哈。所以我假设应该使用JFrame,但是对于将来遇到类似任务的情况,我将改用JDialog。 - Mats_SX

6

只需要将JFrame更改为JDialog即可。

然后在构造函数中使用这行代码:

setModal(true);

你的应用程序将会一直阻塞,直到对话框关闭。

如果你的用户只是输入一个字符串,你可能需要查看JOptionPane.showInputDialog()


好的,他们正在输入三个不同的字符串,并且这些字符串有一些要求,关于它们允许的外观。 - Mats_SX
有了这样的自定义要求,你可能想要创建自己的定制对话框。 - jjnguy
不过你仍然可以使用JOptionPane来完成。给JOptionPane的“message”参数是一个对象,如果是字符串,它会显示字符串的文本,但你可以传递一个JComponent以获取其他自定义内容。但我同意上面的答案中提到的“使用模态JDialog”的建议。 - John Gardner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接