0

给定一个 GUI 应用程序,用户将选择两个单选按钮之一JRadioButton a,或JRadioButton b。根据他的选择,他将输入不同的输入。但是,要计算公式,他将单击常规按钮,JButton c

但是,当在ActionListener.

      c = new JButton("c");
      c.addActionListener(新的ActionListener(){
        @覆盖
        公共无效actionPerformed(ActionEvent e){
          cActionPerformed(e);
        }
      });

因为在 内ActionEvent,我们有,

    公共无效cActionPerformed(ActionEvent ev){
      尝试 {
        双 f = foo.blah(x, y);
        双 b = bar.meh( y, z );
      }
      捕捉(NumberFormatException e){
        JOptionPane.showConfirmDialog(
        null, "错误消息。", "错误", JOptionPane.CANCEL_OPTION
        );
      }
    }

但是,程序仅在调用堆栈中下降一层,返回catch异常对话框。如何做到这一点,以便当用户按下按钮时c,根据是否选择ab,他分别得到fb

4

3 回答 3

0

程序进入catch块的问题与确定选择了哪个单选按钮无关。它可以进入 catch 块的唯一方法NumberFormatException是抛出 a 。可以抛出a 的唯一方法NumberFormatException是它来自foo.blah( x, y );or bar.meh( y, z );

所以 - 您需要首先弄清楚为什么您的函数会抛出该异常。然后你可以应用 La bla bla 的答案。

找出错误在哪里抛出的一个好方法是e.printStackTrace()在你的catch. 这会将堆栈跟踪打印到控制台输出,将您指向导致问题的确切代码行。

于 2012-08-06T03:57:07.277 回答
0

您可以使用isSelected()单选按钮选项。

JRadioButton f = new JRadioButton();
JRadioButton b = new JRadioButton();

public void cActionPerformed( ActionEvent ev ) {
      try {
        if(f.isSelected()){

            double f = foo.blah( x, y );

         } else if(b.isSelected()){

            double b = bar.meh( y, z );

         } else { // If none is selected
            // Do something
         }
      }
      catch( NumberFormatException e ) {
        JOptionPane.showConfirmDialog(
        null, "Error message.", "Error", JOptionPane.CANCEL_OPTION
        );
    }
}
于 2012-08-05T21:40:53.580 回答
0

您可以使用getSource()继承自的方法EventObject来区分事件的来源。

例子:

  public void actionPerformed(ActionEvent event) {
    if (event.getSource() == button1) {
      setSize(300, 200);
      doLayout();
    } else if (event.getSource() == button2) {
      setSize(400, 300);
      doLayout();
    } else if (event.getSource() == button3) {
      setSize(500, 400);
      doLayout();
    }
于 2012-08-05T21:35:28.350 回答