1

ある列のセルで、ユーザーが XHTML テキストを編集できる JavaFX テーブルを作成したいと考えています。太字、斜体、取り消し線などの非常に基本的な書式設定機能のみが必要です。

TableCell の独自のサブクラスを使用し、各セルに WebView を使用することで、これを実装することができました (もちろん HTMLEditor も別の選択肢でしたが、私の要件では WebView で十分であると思います)。

ただし、ユーザーが快適に編集できるようにするには、次の機能が必要です。 1. ユーザーが複数行のテキストを入力した場合、セルの高さをサイズ変更する必要があります。2. コンテキスト メニュー (または、不可能な場合は他のメニューまたはボタン) で、セル内のテキストの一部を上記のように書式設定できるようにする必要があります (太字、斜体など)。

似たような実装に成功した人はいますか? Web で提案を見たことがありますが、コード サンプルが含まれていることはほとんどありませんでした。

4

1 に答える 1

0

私は似たようなことをすることに成功しました。
それを達成するための基本的な手がかりのいくつかを共有できると思いました。

  1. WebView 全体のサイズを変更します。そのためには、WebView 全体が編集可能な html ページである必要があります。contenteditable を true に設定することで実現できます。

    <body contenteditable='true' id='content'></body>

  2. Web ビューにコンテキスト メニューを表示できます。ただし、最初に関連付けられている元のコンテキスト メニューを無効にする必要があるため、注意が必要です。

    WebView editView;

    ...

    EventDispatcher originalDispatcher = editView.getEventDispatcher(); editView.setEventDispatcher(新しい WebmenuEventDispatcher(originalDispatcher));

そして、これはイベント ディスパッチャー クラスです。

 public class WebmenuEventDispatcher implements EventDispatcher {

        private EventDispatcher originalDispatcher;

        public WebmenuEventDispatcher(EventDispatcher originalDispatcher) {
            this.originalDispatcher = originalDispatcher;
        }

        @Override
        public Event dispatchEvent(Event event, EventDispatchChain tail) {
            if (event instanceof MouseEvent) {
                MouseEvent mouseEvent = (MouseEvent) event;
                if (MouseButton.SECONDARY == mouseEvent.getButton()) {
                    mouseEvent.consume();
                    // Show our own menu
                    cmEdit.show(editView.getScene().getWindow(), mouseEvent.getScreenX(), mouseEvent.getScreenY());
                }
            }
            return originalDispatcher.dispatchEvent(event, tail);
        }
    }

ここで、そのメニュー内からフォントを設定するには、双方向 Java<->javascript ブリッジが必要であり、webview 側でいくつかの javascript を使用します。

于 2012-06-23T11:36:49.183 に答える