2010-12-14 18 views
2

setSelectedBoundValueを使用してプログラムによって変更されるJComboBoxのインデックスと、JComboBoxをクリックすることで区別する方法はありますか?JComboBoxのアクション

答えて

2

これは本当にハックが、作品醜いです!

ActionEventには、この場合はマウスボタンのidであるフィールド修飾子が含まれています。

box.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getModifiers() != 0) { 
      // ~ mouse button pressed ;) 
     } 
    } 
}); 
+0

「クリックする」という質問がありますが、ユーザーがEnterキーを使用してコンボボックス内の項目を選択できると仮定する必要があります。ここで0が返されます。したがって、ユーザーアクションとプログラマーアクションを区別することはできません。 – camickr

+0

私は理由をクリックして言った! :-D – dacwe

0

setSelectedBoundValue

その方法を聞いたことがありませんか?

本当に

ないプログラムによって変更されてJComboBoxののインデックスを区別する方法はあります。リスナーを削除することができます。

comboBox.removeActionListener(...); 
comboBox.setSelectedItem(...); 
comboBox.addActionListener(...); 

独自のクラス変数を設定できます。

manualSelection = true; 
comboBox.setSelectedIndex(...); 
manualSelection = false; 
+0

LOLZ、申し訳ありません:だからを使用すると、あなたがsetSelectedIndexまたはsetSelectedValueやマウスクリックを区別しやすくする(方法setSelectedBoundValueではJComboBoxの方法ではありません)。私はsetSelectedIndexを書きたいと思っていました。 – Rabin