JavaFX:在ListView中包装文本

JavaFX:在ListView中包装文本,listview,javafx,javafx-8,Listview,Javafx,Javafx 8,我正在尝试建立一个文本编辑器。我使用ListView来存储评论。我希望字符串自动包装,而不必水平滚动,这样长字符串就不必滚动太多。 请建议在ListView中包装字符串的方法 编辑1: 我的ListView是从FXML初始化的 编辑2: 我终于可以进行初始化了。您所要做的就是用您自己的自定义单元格覆盖默认单元格,该单元格的宽度为列表的宽度,并且允许文本换行。实现基于以下事实:单元s是 list.setCellFactory(参数->新建ListCell(){ @凌驾 受保护的void updat

我正在尝试建立一个文本编辑器。我使用ListView来存储评论。我希望字符串自动包装,而不必水平滚动,这样长字符串就不必滚动太多。 请建议在ListView中包装字符串的方法

编辑1: 我的ListView是从FXML初始化的 编辑2:
我终于可以进行初始化了。

您所要做的就是用您自己的自定义单元格覆盖默认单元格,该单元格的宽度为列表的宽度,并且允许文本换行。实现基于以下事实:
单元
s是

list.setCellFactory(参数->新建ListCell(){
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
if(空| |项==null){
设置图形(空);
setText(空);
//还有其他事情要做。。。
}否则{
//设置宽度
setMinWidth(param.getWidth());
setMaxWidth(param.getWidth());
setPrefWidth(param.getWidth());
//允许包装
setWrapText(真);
setText(item.toString());
}
}
});

我对JavaFX相当陌生。我在哪里编写您的实现?此外,我的ListView还包含特定类的对象的可观察列表。它不仅仅保存字符串对象。复制-通过实现
Initializable
()将代码粘贴到
initialize()
方法中,并用
列表中的值类型替换代码中的
DataModel
。我建议你阅读这篇文章以获得更多信息()。请检查我的编辑并建议我如何继续。非常感谢您的帮助。哦,我在我的
if语句中犯了一个错误,请看一看,并将代码放在initialize()而不是action handler中。我创建了一个public void initilize()方法并复制了您的代码。main中的start方法实际上是加载另一个fxml文件。我正在控制器类中添加initialize方法。我得到以下错误:由以下原因引起:textEditor.Controller.initialize(Controller.java:52)处的java.lang.NullPointerException
list.setCellFactory(param -> new ListCell<DataModel>(){
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty || item==null) {
                    setGraphic(null);
                    setText(null); 
                    // other stuff to do...

                }else{

                    // set the width's
                    setMinWidth(param.getWidth());
                    setMaxWidth(param.getWidth());
                    setPrefWidth(param.getWidth());

                    // allow wrapping
                    setWrapText(true);

                    setText(item.toString());


                }
            }
        });