3

現在のプロジェクトではAutoCompleteDecorate、SwingXから使用しています。 AutoCompleteDecorator.decorate(jComboBox1);

ただし、バックスペースアクションをオーバーライドしたいと思います。元々、AutoCompleteDecorate.decorate(JComboBox)を使用してバックスペースを押すと、コンボボックス内の選択範囲が左に移動し、前の文字は削除されません。バックスペースのデフォルト機能(前の文字を削除する)を実装したいのですAutoCompleteDecorateJComboBox

私の問題を解決するのを手伝ってください。前もって感謝します。

4

1 に答える 1

4

些細なことではありません-デコレータは、削除の代わりに選択を実装するのに大いに役立ちます;-)

まず、必要な動作を定義する必要があります。次に、意図したとおりに動作するアクションを実装し、エディターのActionMapに配置します。

Action myBackspace = ...
ActionMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
     .getActionMap();
map.put("nonstrict-backspace", myBackspace);

これはあいまいです。何が必要か正確にわからないため、オートコンプリートのソースを調べて、myBackspaceの実装方法を理解するのが最善です。

編集

あいまいさについて少し詳しく説明します。私の最初の考えは、次のようにデフォルトのバックスペースバインディングを再インストールすることでした。

InputMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
    .getInputMap();
map.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE, 0), 
            DefaultEditorKit.deletePrevCharAction);

これはおそらく予想されたものではありません。キャレットが編集可能なコンボに含まれる要素の中央にあると仮定すると、カレットから最後までのテキストが選択され、その結果、deletePrevはprev文字ではなく選択された文字を削除します。これにより、カスタムアクションを実装する方法が導かれる可能性があります。最初に選択をクリアし、次にdeletePrevを実行してから、新しい単語がリストにあるかどうかを確認して、再選択します(またはしない)。要件を知らずに言うのは難しい。

于 2012-01-24T09:46:27.143 に答える