0

だからここに私がやろうとしていることがあります。ユーザーが でアイテムを選択した場合、JComboBox1無効にできるようにしたいJComboBox2。ただし、 を選択した場合に限ります"Unavailable"。などについて読んだことaction listenersがありますが、ifステートメントのように使用する方法はありますか?これが私が考えていたことです:

if (jComboBox1.getSelectedItem().equals("Unavailable") == true) {
        jComboBox2.setEnabled(false);
}
4

1 に答える 1

1

それは確かに機能しますが、そのコードを定期的に呼び出す必要があります。ActionListener を使用する方がはるかに優れています-将来的には間違いなく役立ちます。次のような ActionListener を実装するクラスを作成する必要があります。

//This class should be a private class inside the class which holds the JComboBoxes.
private class DisableActionListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox)e.getSource();
        if (cb.getSelectedItem().equals("Unavailable")) {
            jComboBox2.setEnabled(false);
        }
    }
}

これを機能させるには、ActionListener を最初の JComboBox にアタッチする必要があります。ActionListener だけでは役に立ちません。これを行うには、JComboBox で addActionListener() メソッドを使用して、この新しく作成されたクラスのインスタンスを追加します。

ここで、コードを分析します。

private class DisableActionListener implements ActionListener

ここでは、ActionListener インターフェイスを実装するクラスを作成します。これにより、ActionListener の独自のモデルを作成しています。インターフェイスを実装するときは、インターフェイスのすべてのメソッドをオーバーライドする必要があるため、インターフェイスの標準の actionPerformed(ActionEvent e) メソッドをオーバーライドする必要があります。このメソッドは、アイテムを選択または選択解除するたびに呼び出されます (ActionEvent が送出されます)。したがって、このメソッド内で発生させたいことのロジックを配置する必要があります。

JComboBox cb = (JComboBox)e.getSource();

actionPerformed() メソッドを呼び出すすべての ActionEvent には、追加のデータが含まれます。データの断片の 1 つは ActionEvent のソースです - このアクションを発生させたものは何ですか? この場合、ActionListener を JComboBox にアタッチしただけなので、ソースが JComboBox であることがわかります。そのため、オブジェクトである ActionEvent のソースを、イベントを送信した JComboBox にキャストできます。

残りは、構文エラーが修正された、自分で作成した if ロジックです。

あなたが書いた

(jComboBox1.getSelectedItem().equals("Unavailable") == true),

ただし、String の equals() メソッドは既に true を返しているため、(== true) 部分は不要な冗長性です。あなたの場合、基本的に (true == true) になります。

とにかく、これが役に立てば幸いです!

于 2012-06-21T19:53:55.883 に答える