6

編集可能な JCombobox があり、コンボボックス エディター コンポーネントのキーリスナーを追加しました。ユーザーが「Enter キー」を押したときに、編集可能なコンボ ボックスにテキストがない場合は、JOptinoPane を使用してメッセージ ボックスを表示する必要があります。keyrelease イベントで必要なコードを実行したところ、期待どおりにメッセージが表示されます。

問題は、メッセージ ボックスが表示されたときに、ユーザーが JOptionPane の [OK] ボタンで Enter キーを押すと、コンボボックス エディターのキーイベントが再び発生することです。このため、ユーザーがメッセージ ボックスで Enter キーを押すと、JoptionPane が連続して表示されます。

これを解決する方法はありますか?

これには Action リスナーを使用できないことに注意してください。

4

6 に答える 6

16

このコードが役立つかどうかを確認してください!!!

JFrame frame = new JFrame("Welcome!!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JComboBox cmb = new JComboBox();
cmb.setEditable(true);
cmb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {

    @Override
    public void keyReleased(KeyEvent event) {
        if (event.getKeyChar() == KeyEvent.VK_ENTER) {
            if (((JTextComponent) ((JComboBox) ((Component) event
                    .getSource()).getParent()).getEditor()
                    .getEditorComponent()).getText().isEmpty())
                System.out.println("please dont make me blank");
        }
    }
});
frame.add(cmb);

frame.setLocationRelativeTo(null);
frame.setSize(300, 50);
frame.setVisible(true);

ほとんどの人は、このキャスティングのために難しいと感じています。

于 2013-06-16T08:01:46.880 に答える
1
Note that I can't use Action listener for this.

これは私には何の意味もありません。次に ItemListener を使用します

Any idea how to solve this?
  • にKeyListene rを使用しないでください。代わりにSwing JComponents( Note that I can't use Action listener for this.) KeyBindingsを使用してください。

  • 通知はデフォルトでENTER key実装されているためJComboBox、このアクションをオーバーライドする必要がありますAPIENTER key pressed

于 2012-12-27T15:30:37.087 に答える
0

1 つのオプションは、KeySelectionManager インターフェイスを独自のものに置き換えることです。JComboBox.KeySelectionManager は、入力された文字を取得し、選択する必要がある行番号 (int として) を返すため、置き換えたいと考えています。

于 2013-02-14T01:17:30.933 に答える