Nel mio JavaFX
TableView
Ho un TableColumn
su cui ho impostato Cell Factory per rendere ProgressBar
e per altri TableColumn
s Ho impostato Cell Factory per mostrare ToolTip
. Come l'immagine qui sotto. La seconda colonna mostra la barra di avanzamento e altre 3 colonne sono renderizzate per mostrare il suggerimento, che ha valori di stringa semplici da mostrare.Impossibile visualizzare la punta dello strumento sul valore della cella JavaFX TableView
mi stavo problema in cui il TableView
non mostrava/mostrando valori aggiornati nella tabella cioè interfaccia utente non sta convalidando/rinfrescante/dipingere le TableView
elementi. Se ho cliccato su ColumnHeader
per ordinare qualsiasi colonna, solo io posso vedere l'aggiornamento TableView
. Ordinare manualmente la colonna della tabella per aggiornare il contenuto della tabella non ha senso quindi ho cercato e trovato la soluzione per mostrare/nascondere le colonne della tabella per l'aggiornamento della vista tabella.
Per risolvere il problema, ho scritto un codice qui sotto per risolvere il problema di aggiornamento/aggiornamento TableView
ma a causa di questo codice ora ToolTip
non sono visibili.
codice per aggiornare Table View dopo ogni intervallo specifico
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);
}
});
}
}
avviare l'aggiornamento Table View
public void startUpdatingTableProgress() {
keepUpdating = true;
TableProgressBarUpdator tpu = new TableProgressBarUpdator(table);
tpu.start();
}
interrompere l'aggiornamento Table View
public void stopUpdatingTableProgress() {
keepUpdating = false;
}
Aggiunta di più codice che mostra le classi di rendering per mostrare la barra di avanzamento e visualizzare il suggerimento dello strumento.
Codice per mostrare la vista tabella della barra di avanzamento.
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);
}
});
}
}
}
}
codice per mostrare la punta dello strumento
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()));
}
}
}
Edizione -
Se io commento-out queste due linee da TableProgressBarUpdator Classe allora io sono in grado di vedere Strumento Suggerimento per ogni valore di cella nella 1a, 3a e 4a colonna, ma ora il contenuto della Vista tabella non si aggiorna/si aggiorna e quando I UN-commenta questi linee non riesco a vedere la punta dello strumento.
((TableColumn) table.getColumns().get(0)).setVisible(false);
((TableColumn) table.getColumns().get(0)).setVisible(true);
In tutto a causa di queste due linee il mio suggerimento strumento Render non funziona e se rimuovo queste due righe poi Table View Content non sono rinfrescanti/Aggiornamento.
devo commentare-out Platform.runLater(), ma ancora senza fortuna. Sto usando SimpleStringProperty per impostare/ottenere valori e questi valori sono associati alle colonne. –