2016-11-27 2 views
0

Ich habe ein TableView in FXML, und ich möchte es binden, ist Artikel-Eigenschaft auf eine Liste in der Steuerung (wie in WPF), mein FXML Code ist wie folgt:FXML: Bind Tableviews Artikel Eigentum an dem Controller

<TableView fx:controller="controllers.MyController" items="$controller.loggings"> 
    <columns> 
     <TableColumn text="Nom"> 
      <cellValueFactory> 
       <PropertyValueFactory property="name" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn text="Type"> 
      <cellValueFactory> 
       <PropertyValueFactory property="type" /> 
      </cellValueFactory> 
     </TableColumn> 
    </columns> 
</TableView> 

und mein Controller ist wie folgt: ein Exception startet

public class MyController { 
    public ObservableList<Logging> loggings = FXCollections.observableArrayList(); 

    @FXML 
    protected void initialize(){ 
     loggings.add(new Logging(){{ 
      setName("hilton"); 
      setType("hotel"); 

     }}); 
    } 
} 

Aus irgendeinem Grund. Was mache ich falsch?

Antwort

1

Sie haben den fx Namespace deklariert:

<TableView xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MyController" items="$controller.loggings"> 
    ... 
</TableView> 

Weiterhin die Controller-Klasse einen Getter für die enthalten muss loggings Feld:

private final ObservableList<Logging> loggings = FXCollections.observableArrayList(); 

public ObservableList<Logging> getLoggings() { 
    return loggings; 
} 

Hinweis: JavaFX betrachten keine Felder für die Expression Bindung, daher der Getter erforderlich.

0

Ihre FXML-Datei ist falsch. Sie müssen die Elemente der TableView innerhalb Ihrer Controller-Klasse zuweisen.

FXML Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.control.TableColumn?> 
<?import javafx.scene.control.cell.PropertyValueFactory?> 

<TableView xmlns:fx="http://javafx.com/fxml" fx:controller="controllers.MyController" fx:id="tableView"> 
    <columns> 
     <TableColumn text="Nom"> 
      <cellValueFactory> 
       <PropertyValueFactory property="name" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn text="Type"> 
      <cellValueFactory> 
       <PropertyValueFactory property="type" /> 
      </cellValueFactory> 
     </TableColumn> 
    </columns> 
</TableView> 

Controller:

package controllers; 

import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.scene.control.TableView; 

public class MyController { 
    @FXML 
    private TableView<Logging> tableView; 

    public ObservableList<Logging> loggings = FXCollections.observableArrayList(); 

    @FXML 
    protected void initialize(){ 
     loggings.add(new Logging(){{ 
      setName("hilton"); 
      setType("hotel"); 

     }}); 

     tableView.setItems(loggings); 
    } 
} 
Verwandte Themen