私JavaFX
TableView
には、 TableColumn
Cell Factory をレンダリングするように設定したものと、Cell Factory を表示するように設定したものがProgressBar
ありTableColumn
ますToolTip
。下の画像のように。2 番目の列にはプログレス バーが表示され、他の 3 列はツール ヒントを表示するためにレンダリングされ、表示する単純な文字列値があります。
テーブルに更新された値が表示/表示されないという問題が発生していました。つまり、UI が要素TableView
を検証/更新/ペイントしていません。TableView
をクリックして列を並べ替えると、更新ColumnHeader
が表示されるのは私だけです。TableView
テーブルの列を手動で並べ替えてテーブルの内容を更新するのは意味がないので、テーブルビューを更新するためにテーブルの列を表示/非表示にする解決策を検索して見つけました。
TableView
この問題を解決するために、更新/更新の問題を解決するために以下のコードを書きましたが、このコードが原因で現在ToolTip
表示されていません。
特定の間隔ごとにテーブル ビューを更新するコード
class TableProgressBarUpdator implements Runnable {
TableView table;
public TableProgressBarUpdator(TableView fxtable) {
table = fxtable;
}
public void start() {
new Thread(this).start();
}
public void run() {
while (keepUpdating) {
try {
updateProgressbar();
Thread.sleep(1000);
} catch (Exception e) {
LogHandler.doErrorLogging("Error while updating tables cell", e);
}
}
LogHandler.doDebugLogging("Table process repainting is completed.");
}
private void updateProgressbar() throws Exception {
Platform.runLater(new Runnable() {
@Override
public void run() {
((TableColumn) table.getColumns().get(0)).setVisible(false);
((TableColumn) table.getColumns().get(0)).setVisible(true);
}
});
}
}
テーブル ビューの更新を開始
public void startUpdatingTableProgress() {
keepUpdating = true;
TableProgressBarUpdator tpu = new TableProgressBarUpdator(table);
tpu.start();
}
テーブル ビューの更新を停止する
public void stopUpdatingTableProgress() {
keepUpdating = false;
}
プログレス バーとツール ヒントを表示するレンダー クラスを表示するコードを追加します。
プログレス バー テーブル ビューを表示するコード。
public static class ProgressBarTableCell<S, T> extends TableCell<S, T> {
private final ProgressBar progressBar;
private ObservableValue<T> ov;
public ProgressBarTableCell() {
this.progressBar = new ProgressBar();
progressBar.setPrefHeight(23);
setAlignment(Pos.CENTER);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
setGraphic(null);
setText(null);
} else {
if (item.toString().equalsIgnoreCase("Processing")) {
Platform.runLater(new Runnable() {
@Override
public void run() {
if (getGraphic() == null) {
setGraphic(progressBar);
progressBar.setProgress(-1);
} else {
ProgressBar objpProgressBar = (ProgressBar) getGraphic();
objpProgressBar.setProgress(-1);
}
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
});
} else {
Platform.runLater(new Runnable() {
@Override
public void run() {
if (getGraphic() == null) {
setGraphic(progressBar);
progressBar.setProgress(0);
} else {
ProgressBar objpProgressBar = (ProgressBar) getGraphic();
objpProgressBar.setProgress(0);
}
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
});
}
}
}
}
ツール ヒントを表示するコード
public class ToolTip extends TableCell {
@Override
protected void updateItem(Object object, boolean selected) {
if (object == null) {
setGraphic(null);
setText(null);
}else{
setText(object.toString());
setTooltip(new Tooltip(object.toString()));
}
}
}
問題 -
TableProgressBarUpdator クラスからこれらの 2 行をコメント アウトすると、1 列目、3 列目、4 列目の各セル値のツール ヒントを表示できますが、テーブル ビューの内容が更新/更新されず、これらの行のコメントを外すと、ツール ヒントが表示されません。
((TableColumn) table.getColumns().get(0)).setVisible(false);
((TableColumn) table.getColumns().get(0)).setVisible(true);
これらの 2 行が原因で、Tool Tip Render が機能しません。これらの 2 行を削除すると、テーブル ビュー コンテンツが更新/更新されません。