Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何覆盖JavaFXTextArea组件的换行行为?_Java_Javafx - Fatal编程技术网

如何覆盖JavaFXTextArea组件的换行行为?

如何覆盖JavaFXTextArea组件的换行行为?,java,javafx,Java,Javafx,我通过扩展TextArea组件创建了一个新的JavaFX组件,用于盲文输入。不幸的是,TexTaReA组件的默认单词换行行为将在几个盲文字符中间断开一条新的线,而不是只在单词之间的空格中进行。我曾尝试在TextArea组件中搜索定义换行行为的方法,以便覆盖它们,但我没有找到这些方法 如何覆盖此换行行为,以便换行符仅插入空格 我对JavaFX TextArea的默认行为进行了尝试。我使用标准拉丁字母和Unicode字符。两人表现相同 启用文本换行后,默认策略似乎是在超出区域宽度之前在第一个空格处断

我通过扩展TextArea组件创建了一个新的JavaFX组件,用于盲文输入。不幸的是,TexTaReA组件的默认单词换行行为将在几个盲文字符中间断开一条新的线,而不是只在单词之间的空格中进行。我曾尝试在TextArea组件中搜索定义换行行为的方法,以便覆盖它们,但我没有找到这些方法


如何覆盖此换行行为,以便换行符仅插入空格

我对JavaFX TextArea的默认行为进行了尝试。我使用标准拉丁字母和Unicode字符。两人表现相同

启用文本换行后,默认策略似乎是在超出区域宽度之前在第一个空格处断开。如果单个“字”(任何连续的字符序列)太长,无法容纳在容器的宽度内,它将从换行开始,在容器的宽度处中断,然后继续到下一行。这正是我在这种情况下所期望的。你已经告诉它你想强制文本换行,如果一个单词在一行中不合适,那么它也没什么办法

无论如何,这允许我们控制是否添加此文本换行。查看此值在源代码中的使用位置,可以让我们了解它是如何使用的

 private static final CssMetaData<TextArea,Boolean> WRAP_TEXT =
      new CssMetaData<TextArea,Boolean>("-fx-wrap-text",
          StyleConverter.getBooleanConverter(), false) {

      @Override
      public boolean isSettable(TextArea n) {
          return !n.wrapText.isBound();
      }

      @Override
      public StyleableProperty<Boolean> getStyleableProperty(TextArea n) {
          return (StyleableProperty<Boolean>)(WritableValue<Boolean>)n.wrapTextProperty();
      }
 };
private静态最终CssMetaData包装文本=
新CssMetaData(“-fx换行文本”,
StyleConverter.getBooleanConverter(),false){
@凌驾
公共布尔值可设置(文本区域n){
return!n.wrapText.isBound();
}
@凌驾
公共StyleableProperty getStyleableProperty(文本区域n){
return(StyleableProperty)(writeablevalue)n.wrapTextProperty();
}
};
实际上,这里发生的是,这个布尔属性被绑定到CSS属性
-fx wrap text
。此CSS属性只接受一个布尔参数-文本换行是打开还是关闭,没有其他模式。然后,我们可以假设呈现程序正在使用CSS属性来强制执行文本换行策略。这太低级了,不必担心重写


为了解决您的问题,我将关闭文本换行功能,并为您的文本区域的
textProperty()
设置一个侦听器。当文本发生变化时,请在您认为合适的任何位置插入换行符。

我使用的是盲文unicode字符(⠄⠂⠁⠈⠐⠠⠿, 例如),并且它们不能正确地包装单词。在text属性上设置侦听器将产生一系列新问题,最直接的问题是如何保留用户输入的新行,同时允许在添加或删除文本时删除或移动以编程方式输入的新行。您说渲染器正在使用wrap text属性,这是一种低级覆盖,但我认为这是正确的解决方案。