Java 使用默认值将JTextField中的数值约束到特定范围

Java 使用默认值将JTextField中的数值约束到特定范围,java,swing,jtextfield,default-value,Java,Swing,Jtextfield,Default Value,不知道如何用JAVA写这个。。。 我需要编写一个代码,如果用户键入的值超出了10-100英尺的给定范围,那么将插入一个默认值(比如50)。如果输入的是空白或非整数,或者值超出范围,但无法确定如何集成默认值,我会让它处理错误。 我的工作原理是 JPanel panel1 = new JPanel(); panel1.setLayout(new FlowLayout()); poolLength = new JTextField(10); panel1.add(new JLa

不知道如何用JAVA写这个。。。 我需要编写一个代码,如果用户键入的值超出了10-100英尺的给定范围,那么将插入一个默认值(比如50)。如果输入的是空白或非整数,或者值超出范围,但无法确定如何集成默认值,我会让它处理错误。 我的工作原理是

JPanel panel1 = new JPanel();
    panel1.setLayout(new FlowLayout());
    poolLength = new JTextField(10);
    panel1.add(new JLabel("Enter the pool's length (ft):"));
    panel1.add(poolLength);
我想补充的是这样的

If poolLength <10 or >200 then poolLength = 100
        Else this.add(panel1);
如果poolLength为200,则poolLength=100
除此之外,添加(第1组);

免责声明:我不太了解Swing-well,事实上,我一点都不记得了

也许您只需要将验证器附加到JTextField

然而,请注意,在那篇文章中,他们检查的是文本的长度,而不是内容。但是有了文本,您可以轻松地将其解析为一个数字,并检查它是否大于/小于边界

正如你在那篇文章中看到的,通过返回真/假,你可以防止用户输入错误的值——即太小。现在,当检测到错误的值时,不返回“false”,而可能只需对该输入执行
myjtextfield.setText(“50.0”)
?那可能正是你想要的

真的,小心那些“可能”的:我不知道Swing,但是从一般的UI框架设计来看,尝试“setText”可能:

  • 抛出一个例外:许多框架认为在验证过程中更改字段的值并为自己辩护是非常有害的
  • 在编辑时引起奇怪的问题:如果JTextEdit对文本的每一次更改都调用验证,则在尝试时会注意到奇怪的事情,即全选、删除、写入123。您将得到50.0123或12350.0,因为JTextEdit可能会尝试在删除后验证中间空文本,并将其强制为“50.0”
  • 或者,它可能只是工作

所以,如果你的时间很关键,就试试看。也许我猜对了。但是,如果您有时间,请等到有人检查我没有写任何废话。

最简单的方法是在
ActionEvent
期间获取文本,对其进行解析,如果文本超出范围,则重置文本

jTextField.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        boolean isValid = true;

        try {
            int intVal = Integer.parseInt(jTextField.getText());
            if (intVal < 10 || intVal > 200) {
                isValid = false;
            }
        } catch (NumberFormatException x) {
            // user entered something which is not an int
            isValid = false;
        }

        if (!isValid) {
            jTextField.setText("100");
        }
    }
});
jTextField.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
布尔值isValid=true;
试一试{
int intVal=Integer.parseInt(jTextField.getText());
如果(intVal<10 | | intVal>200){
isValid=false;
}
}捕获(NumberFormatException x){
//用户输入的内容不是int
isValid=false;
}
如果(!isValid){
jTextField.setText(“100”);
}
}
});
另见

另一种方法是在默认情况下执行类似的操作。

使用


它不会完全按照所描述的那样运行,而是提供更好的用户体验。用户可以使用↑/↓ 按钮。如果他们键入的值超出指定范围,则当字段失去焦点时,该值将恢复为最后一个有效值。

您可以显示您的尝试吗?可以,请添加显示您迄今为止工作的代码。问题取决于上下文,您是要后验证还是实时验证使用
JSpinner
而不是
JTextField