【问题标题】:Find Exception caller and modify to display a value查找异常调用者并修改以显示值
【发布时间】:2015-10-19 20:55:07
【问题描述】:

假设我有 3 个 TextFields - 用于用户输入值(当程序运行时):

TextField input1 = new JTextField("00");
TextField input2 = new JTextField("00");
TextField input3 = new JTextField("00");

当用户输入值时,程序会获取这些值并将它们存储为整数(用于以后的操作):

public void actionPerformed(ActionEvent e) {

  String temp1 = input1.getText();
  String temp2 = input.getText();
  String temp3 = input3.getText();

  int num1=0, num2=0, num3=0;
  if(e.getSource() == storeButton){
      try{
          num1 = Integer.parseInt(tem1);
          num2 = Integer.parseInt(temp2);
          num3 = Integer.parseInt(temp3);
      } 
      catch(NumberFormatException ex){
          JOptionPane.showMessageDialog(null, "Input must be an integer from 0 to 50");
      }
  }
}

如上面的代码所示,当用户点击 storeButton 时,TextFields 中的值会被解析为整数形式的特定变量,如果任何 TextFields 包含除整数之外的输入,则会显示一条消息会弹出来。

问题:

调用异常时,如何清除(设置为“0”)不包含数字的TextField? 不能清除包含整数的文本字段。 当解析为整数时,我可以通过对每个 TextField 使用 trycatch 来做到这一点,但这意味着代码重复过多(尤其是当有很多 TextField 时)。

【问题讨论】:

  • 将每个输入传递给检查该输入的方法。 try/catch 的一个地方,你知道哪个失败了。重构简单,可以走得更远。
  • NumberFormatException.. 为什么要让用户接受这个?而是使用SpinnerNumberModel 为他们提供JSpinner,它永远不会出现..
  • 我不能说,但这是作业中的要求。我知道还有其他方法,其中一些更有效,但这是一个要求:)

标签: java oop japplet


【解决方案1】:

看看 Character.isDigit()。您可以创建一个循环遍历每个字符串并检查它以查看它是否为数字的子方法。 或者,您可以在字符串上使用正则表达式来检查它是否是数字。 这可以让您摆脱 try/catch 并使用 if/else 处理它们。

【讨论】:

  • 分配需要使用异常处理程序。我用一个字符串数组(每个字符串包含特定的 TextField 数据)实现了 match(regex)。调用异常时,如果在 for 循环中使用语句,其中每个字符串都与正则表达式进行比较,如果不匹配,则关联的 TextField 文本设置为“0”。您的回复有助于在我的脑海中建立这个想法,我会接受它作为答案:)
  • 谢谢,这是我的目标。我认为你通过尝试比查看预先写好的答案学到更多。既然你已经得到了答案,如果你想看看我如何编写代码的一些例子,我很高兴将它转移到聊天中。
  • 那太好了。我不是专家,但我确信有比我的实施更有效的方法。 :) 而且,不客气。
  • 太好了,有机会就加入这个房间:chat.stackoverflow.com/rooms/139/javachat-fish-and-chips
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多