2016-05-14 14 views
1

Ich verwende SceneBuilder, um eine GUI zu erstellen. Jetzt habe ich ein Problem. Wenn ich ein einzelnes Objekt in einem TableView zeigen möchte, funktioniert alles gut, aber wenn ich einen anderen Konstruktor verwende, der ein anderes Objekt enthält, erscheint das zweite Objekt einfach nicht in TableView.Objekt enthält ein anderes Objekt. Wie man es in TableView zeigt?

Code:

public class MainController implements Initializable { 

@FXML 
TableView<Table> tableID; 
@FXML 
TableColumn<Table, Integer> iID; 
@FXML 
TableColumn<Table, String> iName; 
@FXML 
TableColumn<Table, String> iDate; 
@FXML 
TableColumn<Table, Integer> iPrice; 
@FXML 
TableColumn<Table1, String> surname; 
@FXML 
TableColumn<Table1, String> name; 

Table1 t1 = new Table1("just", "testing"); 

final ObservableList<Table> data = FXCollections.observableArrayList(
     new Table(t1, 12, "Name 1", "01/01/20012", 50), 
     new Table(t1, 1, "Name 1", "01/01/20012", 50), 
     new Table(t1, 3, "Name 1", "01/01/20012", 50)); 

@Override 
public void initialize(URL location, ResourceBundle resources) { 

    iID.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rID")); 
    iName.setCellValueFactory(new PropertyValueFactory<Table, String>("rName"));  
    iDate.setCellValueFactory(new PropertyValueFactory<Table, String>("rDate"));  
    iPrice.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rPrice")); 
    surname.setCellValueFactory(new PropertyValueFactory<Table1, String>("surname")); 
    name.setCellValueFactory(new PropertyValueFactory<Table1, String>("name")); 

    tableID.setItems(data); 

} 

Table1-Klasse;

private String surname; 
private String name; 

public Table1(){ 

} 

public Table1(String surname, String name){ 
    this.name = name; 
    this.surname = surname; 
} 

public String getVorname() { 
    return surname; 
} 

public void setVorname(String surname) { 
    this.surname = surname; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

Tabellenklasse;

private final SimpleIntegerProperty rID; 
private final SimpleStringProperty rName;; 
private final SimpleStringProperty rDate; 
private final SimpleIntegerProperty rPrice; 

Table1 t1 = new Table1("just", "testing"); 

public Table(Table1 t1, int sID, String sName, String sDate, Integer sPrice) { 
    this.rID = new SimpleIntegerProperty(sID); 
    this.rName = new SimpleStringProperty(sName); 
    this.rDate = new SimpleStringProperty(sDate); 
    this.rPrice = new SimpleIntegerProperty(sPrice); 
} 

public Integer getRID() { 
    return rID.get(); 
} 

public void setRID(Integer v) { 
    rID.set(v); 
} 

public String getRName() { 
    return rName.get(); 

} 

public void setRName(String v) { 
    rName.set(v); 

} 
public String getRData(){ 
    return rDate.get(); 

} 

public void setRDate(String v){ 
    rDate.set(v); 

} 
public Integer getRPrice(){ 
    return rPrice.get(); 

} 

public void setRNPrice(Integer v){ 
    rPrice.set(v); 

} 

Danke für jede Hilfe!

Antwort

0

Ich denke, Sie suchen nach Cell Customization. Dieser Link kann Ihnen helfen: http://code.makery.ch/blog/javafx-8-tableview-cell-renderer/

EDIT:

Dieser Code Sie einige Fehler geben wird. Beispiel: Sie legen fest, dass TableView<> Objekte vom Typ Table enthält. Daher können Sie keine TableColumn<> vom Typ Table1 festlegen.

Ebenso müssen Sie zuerst die TableView und die TableColumn s initialisieren.

Die Lösung, die ich gefunden: Sie getters in der Table Klasse schreiben können, die jeweils name und surname vom Table1 zurückzukehren. Hier

ist der Code, den Sie benötigen (nur die Änderungen):

Bei Klasse MainController:

TableColumn<Table, String> surname; //Instead of Table1 
    TableColumn<Table, String> name; //Instead of Table1 
    //DONT FORGET TO INITIALIZE THE TableColumns and TableView 

Bei Klasse Table:

private Table1 t1; 

public Table(Table1 t1, int sID, String sName, String sDate, Integer sPrice) { 
    this.rID = new SimpleIntegerProperty(sID); 
    this.rName = new SimpleStringProperty(sName); 
    this.rDate = new SimpleStringProperty(sDate); 
    this.rPrice = new SimpleIntegerProperty(sPrice); 
    this.t1 = t1; 
} 
//Add this 
public String getName(){ 
    return t1.getName(); 
} 
//Add this 
public String getSurname(){ 
    return t1.getVorname(); 
    //Bist Du Deutscher? :D 
} 
+0

hmm ... Danke für deine Antwort, aber ich kann die benötigten Informationen nicht über diesen Link erhalten. Mein Problem ist, dass das zweite Objekt überhaupt nicht in der Tabellenansicht erscheint ... – DonJohn

+0

Können Sie den Rest des Codes zeigen? –

+0

Thx, Code zu meinem Beitrag hinzugefügt! – DonJohn

Verwandte Themen