我今晚刚刚开始Java编程(虽然我是一个很长时间的C ++编码器)。
我正在尝试使用JOptionPane.showInputDialog()
函数来收集用户输入。
但是,它会继续在IDE下面设置输入对话框的z顺序,而在开始菜单上没有通知对话框就在那里。
有没有办法设置选项让它显示在z顺序的顶部,或者甚至是系统模态?
此外,有没有办法限制可以输入到输入对话框文本框中的字符类型,例如仅限数字类型?
感谢您的帮助
答案 0 :(得分:6)
JOptionPane 对话框始终是模态的。这里没有问题。如果你像这样使用它,你会发现你的输入对话框位于底层JFrame(this)的中心:
String myInput = JOptionPane.showInputDialog(this, "myPrompt");
如果您这样称呼,您会发现它位于屏幕中央:
String myInput = JOptionPane.showInputDialog("myPrompt");
在这两种情况下,默认情况下对话框都是模态的。
为了为您的输入格式化和控制JTextField,您应该创建自己的JDialog,这非常简单,并且在内部使用JFormattedTextField,无论您需要什么限制。
答案 1 :(得分:1)
在将输入限制为某些类型的字符等时,您有两种选择。如上所述滚动您自己的JDialog,或者从JOptionPane.showInputDialog()
发送后验证输入并重新弹出对话框输入无效,最好用(新的/添加的)消息告诉用户原因:)
答案 2 :(得分:1)
对于Java应用程序或Applet,JOptionPane
对话框将是模态的。对于您的IDE,不是模态的。
查看JOptionPane.showInputDialog的参数。请注意,message
参数是Object
而不是String
。
当您传递String
时,JOptionPane
会将其显示为提示符(JLabel
),然后显示JTextField
。
但是,您也可以传递JComponent
或JComponent
数组。执行此操作时,JOptionPane
将显示您的组件,而不是默认的JLabel
和JTextField
。
要将输入限制为仅数字,您需要提供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))