2016-07-28 56 views
0

Ich möchte die Schaltflächen unter BorderPane deaktivieren/aktivieren, wenn ein Prozess in der ausgewählten Zeile endet.Aktualisierungsschaltflächen JavaFX, wenn ein ausgewählter Prozess in TableView endet

Ich versuche, diese

downloadTable.getSelectionModel().getSelectedIndices().addListener(new ListChangeListener<Integer>() { 
     @Override 
     public void onChanged(Change<? extends Integer> c) { 
      int selectedIndex = downloadTable.getSelectionModel().getSelectedIndex(); 
      if (downloadTable.getItems().get(selectedIndex).getStatus() == Download.DOWNLOADING) { 
       cancelButton.setDisable(false); 
      } else { 
       cancelButton.setDisable(true); 
      } 

     } 
    }); 

aber es funktioniert nur, wenn ich zu einem Artikel wechseln (Download), die bereits beendet. Was ich tun möchte, ist Schaltflächen zu aktivieren/deaktivieren, während ein Element ausgewählt ist. Dank all

example of ended download with cancelButton that I want to disable

+0

Können Sie die Modellklasse für die Tabelle anzeigen? –

Antwort

0

Vielleicht wie etwas das kann Ihnen helfen:

public class Main { 

    private Button someButton; 
    private TableView<?> downloadTable; 

    private void someMethod() { 
     //somecode 
     Callback<TableView<?>, TableRow<?>> baseFactory = downloadTable.getRowFactory(); 
     downloadTable.setRowFactory(new CustomRowFactory<?>(someButton, baseFactory)); 
     //somecode 
    } 

} 

public class CustomRowFactory<T> implements Callback<TableView<T>, TableRow<T>> { 

    private final Callback<TableView<T>, TableRow<T>> baseFactory; 
    private final Button someButton; 

    public CustromRowFactory(Button someButton, Callback<TableView<T>, TableRow<T>> baseFactory) { 
     this.someButton = somButton; 
     this.baseFactory = baseFactory; 
    } 

    @Override 
    public TableRow<T> call(TableView<T> tableView) { 
     final TableRow<T> row = baseFactory == null ? row = new TableRow<>() : row = baseFactory.call(tableView); 
     someButton.disableProperty().bind(
      row.selectedProperty().and(row.getItem().statusProperty().isNotEquals(Download.DOWNLOADING)) 
     ); 
     return row; 
    } 

} 

oder Bindung stecke in einigen Ihrer TableCell Umsetzung.