JavaFX

ProgressBarTableCell, Focus-Problem beheben

In JavaFX 8 wird der Focus beim Anklicken der ProgressBarTableCell leider nicht an die Tabellenzeile weitergegeben.
Dies kann mit folgender Klasse (ein erweiterte Kopie von ProgressBarTableCell) behoben werden:


package com.sowas.javawiki;
 
import javafx.beans.value.ObservableValue;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.util.Callback;
 
public class ProgressBarTableCellExt<S> extends TableCell<S, Double> {
   private final ProgressBar progressBar;
   private ObservableValue<Double> observable;
 
   /**
    * Erzeugt eine Tabellenzelle welche einen Wert zwischen 0.0 und 1.0 als Progressbar darstellt.
    */
   public static <S> Callback<TableColumn<S,Double>, TableCell<S,Double>> forTableColumn() {
      return param -> new ProgressBarTableCellExt<S>();
   }
 
   public ProgressBarTableCellExt() {
      this.getStyleClass().add("progress-bar-table-cell");
 
      progressBar = new ProgressBar();
      progressBar.setMaxWidth(Double.MAX_VALUE);
 
      // Hier sorft der Mouse-Klick für das Setzen des Focus auf die Tabellenzeile:
      progressBar.setOnMouseClicked(event -> {
         TableRow tableRow = getTableRow();
         tableRow.getTableView().requestFocus();
         tableRow.getTableView().getSelectionModel().focus(tableRow.getIndex());
         tableRow.getTableView().getSelectionModel().select(tableRow.getIndex());
      });
   }
 
   @Override
   public void updateItem(Double item, boolean empty) {
      super.updateItem(item, empty);
 
      if (empty) {
         setGraphic(null);
      } else {
         progressBar.progressProperty().unbind();
 
         final TableColumn<S,Double> column = getTableColumn();
         observable = column == null ? null : column.getCellObservableValue(getIndex());
 
         if (observable != null) {
            progressBar.progressProperty().bind(observable);
         } else if (item != null) {
            progressBar.setProgress(item);
         }
 
         setGraphic(progressBar);
      }
   }
}




Stichworte:

JavaFX, ProgressBarTableCell, Focus, Problem

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007