JOptionPane.showInputDialog()问题

时间:2011-03-21 07:08:09

标签: java swing

我今晚刚刚开始Java编程(虽然我是一个很长时间的C ++编码器)。

我正在尝试使用JOptionPane.showInputDialog()函数来收集用户输入。

但是,它会继续在IDE下面设置输入对话框的z顺序,而在开始菜单上没有通知对话框就在那里。

有没有办法设置选项让它显示在z顺序的顶部,或者甚至是系统模态?

此外,有没有办法限制可以输入到输入对话框文本框中的字符类型,例如仅限数字类型?

感谢您的帮助

4 个答案:

答案 0 :(得分:6)

JOptionPane 对话框始终是模态的。这里没有问题。如果你像这样使用它,你会发现你的输入对话框位于底层JFrame(this)的中心:

String myInput = JOptionPane.showInputDialog(this, "myPrompt");

如果您这样称呼,您会发现它位于屏幕中央:

String myInput = JOptionPane.showInputDialog("myPrompt");

在这两种情况下,默认情况下对话框都是模态的。

为了为您的输入格式化和控制JTextField,您应该创建自己的JDialog,这非常简单,并且在内部使用JFormattedTextField,无论您需要什么限制。

答案 1 :(得分:1)

在将输入限制为某些类型的字符等时,您有两种选择。如上所述滚动您自己的JDialog,或者从JOptionPane.showInputDialog()发送后验证输入并重新弹出对话框输入无效,最好用(新的/添加的)消息告诉用户原因:)

How to Make Dialogs

答案 2 :(得分:1)

对于Java应用程序或Applet,JOptionPane对话框将是模态的。对于您的IDE,是模态的。

查看JOptionPane.showInputDialog的参数。请注意,message参数是Object而不是String

当您传递String时,JOptionPane会将其显示为提示符(JLabel),然后显示JTextField

但是,您也可以传递JComponentJComponent数组。执行此操作时,JOptionPane将显示您的组件,而不是默认的JLabelJTextField

要将输入限制为仅数字,您需要提供JLabel(针对提示)和JFormattedTextField提供InputVerifier。 JavaLoby对JFormattedTextField with MaskFormatter

有一个不错的快速概述

答案 3 :(得分:1)

你可以尝试使用你定义的模式 .matches 方法,它会返回一个布尔值,如果它是真的它会进入你的 if 语句,[]定义你希望用户输入的数据{}定义多少个字符,第一个数字是最小数字,第二个数字是最大数字。 字母像这样工作[A-Za-z]

以下是适用于爱尔兰汽车牌照的示例 [0-9] {2} \ S- \ S [A-ZA-Z] {1,2} \ S- \ S [0-9] {1,7}
“两个数字从0-9”“ - ”“一个或两个字母大写或小写”“ - ”“一到七个数字从0-9” 例如“08 - Ky - 123”

String pattern= "[0-9]{1,8}";
String userInput = JOptionPane.showInputDialog(null, "Enter data of numerical value")

if (userInput.matches(pattern))