gpt4 book ai didi

java - 在 JFXTreeTableView 单元格中换行文本

转载 作者:行者123 更新时间:2023-11-30 10:25:44 24 4
gpt4 key购买 nike

如何将文本包装在 JFXTreeTableView 单元格中?

我的 JFoenix TableTreeView 列单元格工厂创建如下所示。

    // Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param ->
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder()));
column.setPrefWidth(100);
}

经过几个小时的搜索,我想不出如何让树形表格中的单元格来换行文本。我什至尝试将每个 GenericEditableTreeTableCell 的换行文本值设置为 true,但我认为我还应该对某些内容调用 setWrappingWidth() 方法。我尝试了以下代码块,但最终得到了一个 NullPointerException

    // Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param -> {
GenericEditableTreeTableCell<LogEntry, String> cell =
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder());
Text text = (Text) cell.getGraphic();
text.setWrappingWidth(1); //null pointer exception
cell.setWrapText(true);
return cell;
});
column.setPrefWidth(100);
}

因此,我只剩下以下代码块,它运行得非常好并显示表格,但单元格不换行文本。

    // Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param -> {
GenericEditableTreeTableCell<LogEntry, String> cell =
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder());
// I think I should call setWrappingWidth() on some object here
// but I don't know what object
cell.setWrapText(true);
return cell;
});
column.setPrefWidth(100);
}

可以找到设置 JFXTreeTableView 的文档 here .它似乎没有提到任何关于包装单元格文本的内容。

编辑:我试着用 CSS 来做,但没有得到任何结果。事实上,cell.isWrapText() 在使用此 CSS 代码后返回了 false - 这意味着它没有事件将值设置为 true。我知道 CSS block 工作正常,因为我可以用它更改每个元素的文本填充颜色。

* {
-fx-wrap-text: true;
}

编辑 2: 一些人在其他半相关的帖子中说,滚动 Pane 会导致节点认为它的宽度比显示给用户的宽度大得多。由于 JavaFX TreeTableView 在表格太大时使用滚动条,我想我会尝试他们的解决方案。我尝试设置单元格的首选宽度 - 仍然没有结果。

cell.setWrapText(true);
cell.setPrefWidth(100);
//cell.setMaxWidth(100); doing this too made no difference
//cell.setMinWidth(100); doing this too made no difference

编辑 3: 我想我知道问题所在了!似乎行高拒绝让单元格换行。如果我将行的最小高度设置为足够大的值,单元格会换行它的文本!现在我只需要知道如何动态调整行高以在单元格想要换行时容纳它。

编辑 4: 该行似乎不允许换行,这可能是单元格无法换行文本的原因。它无法换行文本,因为它创建的新行被压缩了。

最佳答案

我使用了您的一种方法,但也制作了具有 JFXTextArea 而不是 JFXTextField 的自定义 EditorBuilder。

自定义 TextAreaEditorBuilder 如下:

public class TextAreaEditorBuilder  implements EditorNodeBuilder<String> {

private JFXTextArea textArea;

@Override
public void startEdit() {
Platform.runLater(() -> {
textArea.selectAll();
});
}

@Override
public void cancelEdit() {

}

@Override
public void updateItem(String s, boolean isEmpty) {

Platform.runLater(() -> {
textArea.selectAll();
textArea.requestFocus();
});
}

@Override
public Region createNode(
String value,
DoubleBinding minWidthBinding,
EventHandler<KeyEvent> keyEventsHandler,
ChangeListener<Boolean> focusChangeListener) {

StackPane pane = new StackPane();
pane.setStyle("-fx-padding:-10 0 -10 0");
textArea = new JFXTextArea(value);
textArea.setPrefRowCount(4);
textArea.setWrapText(true);
textArea.minWidthProperty().bind(minWidthBinding.subtract(10));
textArea.setOnKeyPressed(keyEventsHandler);
textArea.focusedProperty().addListener(focusChangeListener);
pane.getChildren().add(textArea);

return ControlUtil.styleNodeWithPadding(pane);
}

@Override
public void setValue(String s) {
textArea.setText(s);
}

@Override
public String getValue() {
return textArea.getText();
}

@Override
public void validateValue() throws Exception {

}
}

然后您的列的配置如下所示:

negativeCasingColumn.setCellFactory(param -> {
TextAreaEditorBuilder textAreaEditorBuilder = new TextAreaEditorBuilder();
GenericEditableTreeTableCell<DiagnosticMethodFX, String> cell
= new GenericEditableTreeTableCell<>(textAreaEditorBuilder);
cell.setWrapText(true);
return cell;
});

基本上我是在包装单元格,但要确保我使用 TextArea 作为编辑字段。对我来说这很好,但如果你想要更优雅的解决方案,也许你可以检查 GenericEditableTreeTableCell 中的 cancelEdit() 方法,它将内容显示设置为仅文本: setContentDisplay(ContentDisplay.TEXT_ONLY) 是抽象类 Labeled 中内容属性的设置,其中文本换行设置为 false。我没有深入研究它,但肯定可以制定一些解决方法。

关于java - 在 JFXTreeTableView 单元格中换行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45999386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com