2

ActionEvent eと でどの actionEvent が発生したかを確認したいe.getSource()。これにスイッチケースを使用できますか?

public void actionPerformed(ActionEvent e){
    switch(e.getSource()){
        case radius:
            double r = validate(radius.getText());
            break;
        case height:
            double h = validate(height.getText());
            break;
        case out:
            out.setText(String.valueOf(h*r));
            break;
    }
}
4

4 に答える 4

8

はい、でスイッチを使用できますactionPerformed

いいえ、ここで示したように使用することはできません。

switchプリミティブ型と のみをサポートしますenum(およびString、ただし Java 7 以降のみ)。

もう 1 つの問題は、case-values 値がコンパイル時の定数でなければならないことです。

次のようなコードが必要です。

public void actionPerformed(ActionEvent e){
    if (e.getSource() == radius) {
        double r = validate(radius.getText());
    else if (e.getSource() == height) {
        double h = validate(height.getText());
    else if (e.getSource() == out) {
        out.setText(String.valueOf(h*r));
    }
}
于 2009-11-03T12:35:44.710 に答える
8

いいえ、できません。switch ステートメントで使用できる型は非常に限られています。switch ステートメントを参照してください。

もちろん、これを一連の「if」および「else if」ステートメントとして書くこともできます。

于 2009-11-03T12:38:10.127 に答える
4

他のソリューションが指摘しているように、このコンテキストではスイッチを使用できません。ActionListenerただし、大きなif-thenブロックを含むものを実装するのではなく、ActionListenersイベントソースごとに個別に実装してみませんか?これは、はるかにOOベースのアプローチです。

通常、ActionListener実装は(小さな)匿名の内部クラスであるため、.javaファイルの急増に対処する必要はありません。

于 2009-11-03T13:12:58.217 に答える
1

には、文字列であるフィールドがActionEvent含まれています。ActionCommandの作成時に設定されていない場合は、Buttonデフォルトでボタンのテキストになります。代わりにそれを使用できます。

何かのようなもの:

switch(e.getActionCommand()) {
    case "Radius":
          ....
    case "Height":
          ....
}
于 2015-07-31T05:00:02.257 に答える