首页 文章

使用JavaFX创建自定义文本编辑组件

提问于
浏览
2

我想创建一个自定义文本编辑组件 . 基本上我需要一个能够设置插入符并以自定义方式处理键事件的文本 . 有没有办法在JavaFX中这样做? Text上有特定于实现的方法(不推荐使用,评论说它们应该被认为是私有的),但是我不能使用它们 .

是否可以在JavaFX中这样做?

1 回答

  • 3

    如果使用TextField或TextArea,它们都是TextInputControl的子类 . TextInputControl提供caretPositionProperty,您可以使用它来读取和修改插入位置 . 所有场景图形对象(包括TextField和TextArea)都是Node的实例 . 节点允许您设置自定义EventHandlersevent filters . 您可以使用事件处理程序覆盖TextInputControls的默认键处理处理程序,以便您可以实现自己的处理 .

    如果您需要通过自定义TextField或TextArea实例无法获得的进一步自定义功能,那么您可以创建自己的TextInputControl子类并根据需要实现自定义文本编辑组件,但由于复杂性,我不会真正建议这种方法并且可能需要依赖于您可能最终需要的内部JavaFX apis .

    TextField对我不起作用,因为:1 . 它有一个指示焦点的边框,我不知道如何删除 .

    这是一个指向default caspian.css stylesheet for JavaFX 2.2的链接 . 您可以通过设置's :focused pseudoclass selector style to the same values as it'的默认选择器来设置TextField的样式以删除焦点边框 . 例如:

    .text-field:focused {
        -fx-background-color: -fx-shadow-highlight-color, -fx-text-box-border, -fx-control-inner-background;
        -fx-background-insets: 0, 1, 2;
        -fx-background-radius: 3, 2, 2;
    }
    

    有关如何在JavaFX中使用css的信息,请参阅JavaFX css reference guide .

    TextField对我不起作用,因为:2 . 它有固定数量的列,我需要动态更改宽度 .

    TextField是一个可调整大小的控件,如果将其放在具有适当约束的调整大小布局窗格中,它将动态更改其宽度 . TextField中的列数设置为preferred column count,而不是固定列数 .

    有关JavaFX中布局的更多信息,请参阅JavaFX layout documentation .

相关问题