7

JavaFX TextAreaのタブ幅を設定するにはどうすればよいですか?

TextArea で集計(タブキー)を使用すると、集計の幅が広くなります。幅を制御したい、つまり 4 つのスペースを使用したい。ドキュメントでは、これを行う方法が見つかりませんでした。

このコードを試しました (taInput は TextArea です) が、正常に動作しません:

taInput.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e) {
        if (e.getCode() == KeyCode.TAB) {
            // TAB SPACES
            StringBuilder sb = new StringBuilder(config.getTabSpacesCount());
            for (int i=0; i<config.getTabSpacesCount(); i++) {
                sb.append(' ');
            }
            taInput.insertText(taInput.getCaretPosition(), sb.toString());
            e.consume();
        }
    }
});
4

3 に答える 3

5

最後に、これを行う方法を見つけました。

keyPress アクションが実行された後にイベントが処理されるため、setOnKeyPressed() メソッドはこのタスクには適していないようです。

addEventFilter() は、アクションが実行される前にイベントを処理するため、イベントを操作できます。

私の新しいコード:

taInput.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e) {
        if (e.getCode() == KeyCode.TAB) {
            String s = StringUtils.repeat(' ', config.getTabSpacesCount());
            taInput.insertText(taInput.getCaretPosition(), s);
            e.consume();
        }
    }
});
于 2012-12-09T02:20:25.730 に答える
1

@テノトロン

コードは、TAB キーと一連の修飾子 (シフト、コントロール、alt、メタ、またはショートカット) の組み合わせに対しても同じロジックを実行します。TextArea 内の意味

TAB キーを押す = Ctrl(修飾子) + TAB = .... = あなたのロジック。

この問題を解決するには、KeyCombinationを使用する必要があります

サンプルコード:

textArea.addEventFilter(KeyEvent.KEY_PRESSED,
                new EventHandler<KeyEvent>() {
                    final KeyCombination combo = new KeyCodeCombination(
                            KeyCode.TAB);
            @Override
                    public void handle(KeyEvent event) {
                          // check for only tab key
                        if (combo.match(event)) {
                            textArea.insertText(textArea.getCaretPosition(),
                                    "I am not real TAB");
                            event.consume();
                }
            }
        });

TAB キーを押すと、「I am not Real TAB」という結果が表示され、ctrl+TAB でシーンの次のノードが強調表示されます。

参照 :

KeyEvents を正しくチェックする

キーの組み合わせ

于 2012-12-09T17:55:59.150 に答える