如果输入不是想要的话,如何弹出重试?

时间:2015-05-05 03:27:39

标签: java swing if-statement joptionpane

所以我试图在用户没有在JTextField中输入0-60的数字时创建一个JOptionPanel弹出窗口,但我不确定如何

这是我试过的

else if(e.getSource() == Save) {

            Task task = new Task();
            task.hour = hin.getText();
            task.min = min.getText();
            if(min.getText() > 0 && min.getText() < 60) {
                JOptionPane.showMessageDialog(null, "Please enter a valid time.");
            }
            else{
            task.day = (String) dayspinner.getValue();
            task.description = desc.getText();
            tasks.add(task);
            ObjectOutputStream os = null;
            try{
                os = new ObjectOutputStream(new FileOutputStream(save));
                os.writeObject(tasks);
                os.close();
            }catch(IOException ex) {
                ex.printStackTrace();
            }
            tframe.setVisible(false);
            }
        }

但是我得到的错误是“二元运算符的错误操作数类型”&lt;'“。

4 个答案:

答案 0 :(得分:2)

对于用户输入验证,请使用JFormattedTextFieldJSpinnerInputVerfifer甚至是DocumentFilter(但如果您到达此处,那么您可以使用#&#39} 39;可能做错了)

这些将允许您实时验证字段(焦点更改后)并确保仅允许用户输入所需的值。您还可以使用InputVerifier来限制焦点更改,这样用户就无法离开该字段,直到他们输入有效值

有关详细信息,请参阅How to Use Formatted Text FieldsHow to Use SpinnersValidating Input

答案 1 :(得分:1)

getText()方法返回String,您无法使用<>来比较String。如果您首先将min#getText的结果转换为int,然后进行适当的比较会更好。您可以使用Integer#parseInt()

执行此操作
int minVal = Integer.parseInt(min.getText());
//fixed the condition
if (!(minVal > 0 && minVal < 60)) {
    //rest of the code...
}

答案 2 :(得分:0)

int无法使用比较运算符进行比较。解析Integer.parseInt(String someString) - 值(CPropertySheet + CPropertyPage)而不是比较它们。

答案 3 :(得分:0)

更改

    if(min.getText() > 0 && min.getText() < 60) {
        JOptionPane.showMessageDialog(null, "Please enter a valid time.");
    }

    if(Integer.parseInt(min.getText()) > 0 && Integer.parseInt(min.getText()) < 60) {
        JOptionPane.showMessageDialog(null, "Please enter a valid time.");
    }