2

私は、JavaFX でリッチ テキスト エディターを作成する最善の方法を調査しています。現時点での選択肢は、AnchorPane を拡張してすべてのレイアウト、ナビゲーションなどを最初から行うか、TextInputArea を拡張することです。独自の実装を持っている人や、最小限の実装を提案したい人はいますか?

FWIWここに私からのスクラップがあります:

public class TryPain3 extends TextInputControl { プライベート AnchorPane rootNode = new AnchorPane();

public TryPain3() {
    super(new Content() {
        private String text = "";

        @Override
        public String get(int i, int i1) {
            return text.substring(i, i1);
        }

        @Override
        public void insert(int i, String string, boolean bln) {
        }

        @Override
        public void delete(int i, int i1, boolean bln) {
        }

        @Override
        public int length() {
            return text.length();
        }

        @Override
        public String get() {
            return text;
        }

        @Override
        public void addListener(ChangeListener<? super String> cl) {

        }

        @Override
        public void removeListener(ChangeListener<? super String> cl) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public String getValue() {
            return text;
        }

        @Override
        public void addListener(InvalidationListener il) {

        }

        @Override
        public void removeListener(InvalidationListener il) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    });

    setEditable(true);

    Text text1 = new Text("fred was here");
    text1.setFont(Font.font("Tahoma", FontWeight.NORMAL, 18));
    text1.setTextAlignment(TextAlignment.LEFT);

    text1.setFontSmoothingType(FontSmoothingType.LCD);

    rootNode.getChildren().add(text1);


    setSkin(new TP3Skin(this, rootNode));

}


class TP3Skin implements Skin<TryPain3> {
    TryPain3 tp;
    Node root;

    public TP3Skin(TryPain3 tp, Node root) {
        this.tp = tp;
        this.root = root;
    }


    @Override
    public TryPain3 getSkinnable() {
        return tp;
    }

    @Override
    public Node getNode() {
        return root;
    }

    @Override
    public void dispose() {
        tp = null;
        rootNode = null;
    }

}

}

スキンはオプションではないようです。

知りたい質問は次のようなものです。

  • UI はどのように描画されることになっていますか? - ゼロからコーディングできて非常に満足していますが、例として forward() への呼び出しの利点を得る方法
  • UI の作成はスキンで行う必要がありますか?
  • テキストの一部をクリックした場合にカーソルを置く場所などを基本クラスが処理するかどうか

このことから、他の疑問が生じると確信しています。

4

1 に答える 1

1

TextFlowさまざまなテキスト スタイルの集約を可能にする次の JavaFX 8.0 コントロール を試してみることをお勧めします。ここで例を参照してください: https://wikis.oracle.com/display/OpenJDK/Rich+Text+API+Samples

JavaFX 8 は JDK8 の一部です。したがって、ここから開発者ビルドをダウンロードできますhttp://jdk8.java.net/download.htmlには、JavaFX と新しい TextFlow コントロールが含まれます。

于 2012-12-13T20:30:31.627 に答える