2

私はJComboBoxを持っています。次のコードを使用して ActionListener を追加します。


addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                textComboActionPerformed(evt);
            }
        });

初登場時はこんな感じ。それにはいくつかのオプションがあります。
代替テキスト

Basic Text Box が最初の要素であることがわかります。これは、JComboBox が最初に表示されたときに表示される要素になります。

JComboBox をクリックすると、その下で使用可能なオプションが表示されます。

代替テキスト

ただし、「基本テキスト ボックス」を選択すると、ActionEvent は発生しません。リストの最初の要素であることと関係があります。他の JComboBox を選択すると、ActionEvent が発生します。

編集: Linux では、要素を選択すると、イベントが発生します。次に、その要素を再度選択すると、2 回目は起動しません。最初の要素だけに分離されているわけではありません。すでに選択されている要素を 2 回選択する必要があります。

この動作は Linux でのみ発生します。Windows では、最初の要素であっても、どの要素をクリックしてもイベントが発生します。これがなぜなのかについてのアイデアはありますか?このような動作は JVM ごとに異なりますか?

ありがとう

4

1 に答える 1

2

ItemListenerまず、使用する正しいリスナーは(ではなく)だと思いますActionListener

コメントで述べているように、これにより、プラットフォーム間で一貫した動作が得られます。既に選択されているアイテムが「再選択」された場合、イベントはまったく発生しません。これは、 JavaDocsに従って ItemListener が機能することになっている方法とまったく同じです。

aListener は、選択された項目 が変更されると、1 つまたは 2 つの ItemEvent を受け取ります。

既に選択されているのと同じ値を選択すると、明らかに値を変更しないため、イベントは発生しません。ただし、それは明らかに望んでいるものではありません。別の方法として、事前に選択されたアイテムなしで JComboBox を表示することをお勧めします。

JComboBox comboBox = new JComboBox(model);
comboBox.setSelectedItem(null);

アプリケーションでそれが可能かどうかはわかりませんが、この方法では、実際の値が選択されるたびに必ずイベントが発生します。(また、ユーザビリティの観点からもより理にかなっていると思います。専門家ではない人がコンボ ボックスをクリックして、既に選択されている値を選択するのはなぜでしょうか?)

于 2010-12-08T14:59:35.483 に答える