JFXTreeTableViewセルにテキストをラップするにはどうすればよいですか?JFXTreeTableViewセルのテキストを折り返す
My 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のブロックが正しく機能していることはわかっています。なぜなら、すべての要素のテキストの塗りつぶし色を変更できるからです。
* {
-fx-wrap-text: true;
}
編集2:一部の人々はスクロールペインがノードは、それがユーザーに示されているものよりもはるかに大きな幅を持っていると思うことがあります他の半関連記事にしました。 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:行は、セルがテキストを折り返しに失敗した原因である可能性がある改行を許可していないようです。テキストをラップすることはできません。新しい行が作成されるからです。
代わりにJavaツリーテーブルを使用しましたが、JFXTreeTableに近い将来別のショットを与える予定です。私はあなたのコードを試してみるでしょうが、今のところ、これはしっかりした答えのように見えるので、私はそれを途中でupvoteします! – Region39
すばらしい、ありがとう! :) – smashbotica
私は最終的に今日あなたのソリューションを実装しようとしていますが、私はそのプロセスの一部に固執しています。 'TreeAreaEditorBuilder'で' createNode'メソッドをオーバーライドすると、 'ControlUtil.styleNodeWithPadding(pane)'を返します。 'ControlUtil'はどこから来ますか? IntelliJ内でエラーが発生しました。インポートするクラスはありません。私はGoogle検索でもドキュメントを見つけることができませんでした。 – Region39