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

时间:2012-08-19 20:41:13

标签: javafx javafx-2

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

是否可以在JavaFX中这样做?

1 个答案:

答案 0 :(得分: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的链接。 您可以设置TextField的样式以删除焦点边框,方法是将其设置为:focus pseudoclass selector样式为与其默认选择器相同的值。例如:

.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