【问题标题】:Checking whether the text in a JTextField is a certain data type检查 JTextField 中的文本是否为某种数据类型
【发布时间】:2025-11-28 02:40:01
【问题描述】:

我正在尝试在课堂上为我的 GUI 编写一些验证代码。我将如何将 JTextField 中的文本放入 while 语句并提示 JOptionPane 让用户输入必要的数字(双精度)?更具体地说,如何检查我从 JTextField 得到的内容是否是字符串/字符串+数字/除数字之外的任何其他内容?

String text=JTextField.getText();

while(text.equals*a string or anything but a number*);
   JOP("Invalid input ............ etc...

如果你有时间,这里是我的 GUI 和我的课程。我正在尝试对其余方法执行此操作。但是上面的答案就足够了。

http://www.mediafire.com/?f079i1xtihypg1b

http://www.mediafire.com/file/f079i1xtihypg1b/FinanceGUI.java

更新:

这是我目前所拥有的:

  //get the text entered in the amountRentText
  //JTextField and parse it to a Double
String amtRentIn=amountRentText.getText();

try{Double.parseDouble(amtRentIn);}
catch(NumberFormatException nfe){
   while()
       amtRentIn=JOptionPane.showInputDialog("Invalid input. Please "+
           "enter your rent: ");
 }

 double rent= Double.parseDouble(amtRentIn);
 fin.setRent(rent);

我在这段时间里放了什么?

【问题讨论】:

    标签: java validation user-interface input


    【解决方案1】:
    String amtRentIn=amountRentText.getText();
    boolean incorrect = true;
    while(incorrect){
    try{Double.parseDouble(amtRentIn);incorrect = false;}
    catch(NumberFormatException nfe){
       amtRentIn=JOptionPane.showInputDialog("Invalid input. Please "+
               "enter your rent: ");
     }
    
    }
    

    【讨论】:

    • 我实际上用 return; 替换了不正确 = true并且只是要求用户更改 JTextField 中的错误。但是,这不正确 = true 是如何工作的?
    • @Andrei TheGiant Haxtor 你是对的。最后一个不正确=真不是必需的,我已将其删除并更新了答案。
    【解决方案2】:

    javax.swing.InputVerifier 就是为此而设计的。您对verify() 的实现可以调用parseDuble()。这是另一个example

    【讨论】:

      【解决方案3】:

      我想到的“便宜”不太漂亮的解决方案是在该字符串上使用 Double.parseDouble(..),并准备捕获在字符串有任何非数字内容。

      【讨论】:

      • ehm...我是第一堂课的java菜鸟,这是我的最后一个项目。我不太了解捕获异常。
      • 如果您正在寻找或进行简单的测试,那么如上所述:try{Double.parseDouble(yourTextHere)}catch(NumberFormatException nfe){/* not a double */}
      • 好的,那么我会在哪里通过 JOptionPane 提示用户输入正确的数字?在 try{ --- } ?
      • 视情况而定。您可以通过多种方式进行操作。在这种情况下,重要的是可以抛出此异常的代码位于 try {} catch 块中。因此,即使您将用户的输入收集为字符串,重要的是您在 try catch 块中进行解析。其余的可能在外面。此外,在 catch 块中,您必须放置要执行的代码,以防由于用户的非数字输入而导致解析失败。