0

GUI アプリの場合、ユーザーはJRadioButton a、またはの 2 つのラジオ ボタンのいずれかを選択しますJRadioButton b。彼の選択に応じて、彼はさまざまな入力を入力します。ただし、数式を計算するには、通常のボタン をクリックしますJButton c

ただし、 内で 2 つ以上のメンバー関数が呼び出されると、問題が発生しますActionListener

      c = new JButton( "c" );
      c.addActionListener( 新しい ActionListener() {
        @オーバーライド
        public void actionPerformed( ActionEvent e ) {
          cActionPerformed(e);
        }
      });

の中ActionEventには、

    public void cActionPerformed( ActionEvent ev ) {
      試す {
        double f = foo.blah( x, y );
        double b = bar.meh( y, z );
      }
      catch( NumberFormatException e ) {
        JOptionPane.showConfirmDialog(
        null、「エラー メッセージ」、「エラー」、JOptionPane.CANCEL_OPTION
        );
      }
    }

ただし、プログラムはコール スタックで 1 レベルだけ下に移動し、catch例外ダイアログを返します。ユーザーがボタンを押したときに、またはが選択さcれているかどうかに応じて、それぞれまたはを取得するようにするにはどうすればよいですか?abfb

4

3 に答える 3

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 に答える
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

プログラムがブロックに入るという問題は、catchどのラジオボタンが選択されているかを判断することとは何の関係もありません。catch ブロックに入ることができる唯一の方法は、 aNumberFormatExceptionがスローされている場合です。NumberFormatExceptionaをスローできる唯一の方法は、foo.blah( x, y );またはから来ている場合bar.meh( y, z );です。

したがって、最初に関数によって例外がスローされる理由を理解する必要があります。次に、La bla bla の回答を適用できます。

エラーがスローされている場所を把握する良い方法はe.printStackTrace()catch. これにより、スタック トレースがコンソール出力に出力され、問題の原因となっている正確なコード行が示されます。

于 2012-08-06T03:57:07.277 に答える