JavaFX TextInputArea的最小实现

时间:2012-12-13 19:35:59

标签: user-interface javafx-2 rich-text-editor

我正在研究在JavaFX中编写富文本编辑器的最佳方法 - 不要向我提及HTMLEditor:我们花了几个月的时间来讨论它并且我可以写一些关于它不适合的原因我们的宗旨!目前的选择是扩展AnchorPane并从头开始执行所有布局,导航等,或者扩展TextInputArea,看起来好像会有所帮助。任何人都有他们自己的实现或想提出一个最小的实现?

FWIW这是我的废话:

公共类TryPain3扩展TextInputControl {     private 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;
    }

}

}

看起来皮肤不是可选的。

我想知道的问题是:

  • 如何绘制用户界面 - 我很乐意从头开始编写代码,但是如何将对forward()的调用的好处作为示例
  • 应该在Skin中完成UI创建吗?
  • 如果单击一些文本
  • ,基类是否处理诸如放置光标的位置之类的内容

我确信会有其他问题。

1 个答案:

答案 0 :(得分:1)

您可能想尝试下一个JavaFX 8.0控件TextFlow,它允许聚合各种文本样式。请参阅此处的示例:https://wikis.oracle.com/display/OpenJDK/Rich+Text+API+Samples

JavaFX 8是JDK8的一部分。所以你可以在这里下载开发人员http://jdk8.java.net/download.html,它将包括JavaFX和新的TextFlow控件。