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

时间:2013-10-17 18:50:28

标签: java swing jtextfield default-value

不确定如何在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);

3 个答案:

答案 0 :(得分:0)

免责声明:我不知道摇摆不错,实际上,我根本不记得太多了..

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

Here you have an example但请注意,在该帖子中,他们检查文本的长度,而不是内容。但是有了文本,你可以很容易地将它解析为一个数字并检查它是否大于/低于边界。

正如您在该帖子中看到的那样,通过返回true / false,您将阻止用户输入错误的值 - 即。太小。现在,当检测到错误的值时,那么,而不是返回'false',可能,就可以在该输入上简单地myjtextfield.setText("50.0")?这可能完全符合您的要求。

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

  • 抛出异常:许多框架认为在验证期间更改字段的值并为自己辩护是非常邪恶的
  • 编辑时会出现奇怪的问题:如果JTextEdit在文本的每次更改时调用验证,那么在尝试时会发现奇怪的事情,即选择全部,删除,写入123.最终会得到50.0123或12350.0因为JTextEdit 可能尝试在删除后验证中间空文本并将其强制转换为“50.0”..
  • 或者,它可能会起作用。

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

答案 1 :(得分: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");
        }
    }
});

另见How to Use Text Fields

另一种方式是use a spinner默认情况下会这样做。

答案 2 :(得分:0)

请改用JSpinner

enter image description here

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