2016-09-21 3 views
0

ich brauche auf einer TableView eine Spalte zu zeigen, dass eine verschachtelte Bean ist wie folgt:JavaFX Table mit verschachtelten Bean

public class A_Bean { 
    private ObjectProperty<BigDecimal> id; 
    private B_Bean qwerty; 
} 


public class B_Bean { 
    private ObjectProperty<BigDecimal> id; 
    private StringProperty qwerty_B; 
} 

die All-Bean-Klasse hat die get, set und Eigenschaftsmethode. Mein Problem ist, dass A_Bean eine Variable von B_Bean Typ hat, und ich weiß nicht, wie man die tableColumn, dass es das qwerty_B Feld von B_Bean Feld und nicht den Zeiger auf die qwerty Variable von A_Bean anzeigen muss.

@FXML 
private TableView<A_Bean> myTable; 
@FXML 
private TableColumn<A_Bean, BigDecimal> idColumn; 
@FXML 
private TableColumn<A_Bean, B_Bean> qwertyColumn; 

..... 

@FXML 
private void initialize() { 
idColumn.setCellValueFactory(cellData -> cellData.getValue().idProperty()); 
qwertyColumn.setCellValueFactory(cellData -> cellData.getValue().qwertyProperty()); 
..... 
} 

public void setMainApp(MainApp mainApp) { 
    this.mainApp = mainApp; 
    myTable.setItems(mainApp.getA_BeanData()); 
} 

Wenn, wenn mein Code ausführen ich auf dem tableColumn etwas sehen werden wie [email protected]

Ich muss die tableColumn sagen, dass es das qwerty_B Feld aus der A_Bean holen müssen. Wie kann ich das machen?

+0

Ich hätte erwartet, dass 'xx.B_Bean @ hashcode' zu ​​sehen, nicht' xx.A_Bean @ Hashcode' ... bist du sicher, dass du das siehst? –

+0

Ja, ich habe einen Tippfehler gemacht, es ist 'xx.B_Bean @ 1234dasf23'. Irgendein Vorschlag für die Lösung des Problems? –

Antwort

0

Nur eine Zellfabrik verwenden, um die Zelle zu sagen, wie die B_Bean es als Wert enthält anzuzeigen:

qwertyColumn.setCellFactory(tc -> new TableCell<A_Bean, B_Bean>() { 
    @Override 
    protected void updateItem(B_Bean item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : item.getQwerty_B()); 
    } 
}); 
+0

Großartig! es funktioniert! Denken Sie daran, 'javafx.scene.control.TableCell' zu importieren. Vielen Dank! –