2016-12-24 7 views
-1

Ich kann nicht scheinen, einen Weg zu finden, meinen Tisch zu befüllen :(, wenn ich sie einzeln betrachte, säen sie mir in meiner Konsole, selbst wenn ich ein Handbuch hinzufüge Objekt zu meiner observebleList es Arbeit, es füge einfach nicht meine Daten inported ....Ich kann meine Tabellenansicht in Java fx nicht füllen

This is my Controller: 
package Interface; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.ResourceBundle; 
import javafx.application.Platform; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.control.cell.TextFieldTableCell; 
public class ControllerForFinalPoint implements Initializable { 
    String id ; 
    String x ; 
    String y ; 
    String z ; 
    public void exitApplication(ActionEvent exitApplication) { 
     Platform.exit(); 
    } 
    public void intoarcere (String id, String x, String y, String z) { 
     this.id = id; 
     System.out.println(id); 
     this.x = x; 
     System.out.println(x); 
     this.y = y; 
     System.out.println(y); 
     this.z = z; 
     System.out.println(z); 
    } 

    @FXML 
    private TableView<MyPointFinal> tableCoord2; 
    @FXML 
    private TableColumn<MyPointFinal, String> Id; 
    @FXML 
    private TableColumn<MyPointFinal, String> X; 
    @FXML 
    private TableColumn<MyPointFinal, String> Y; 
    @FXML 
    private TableColumn<MyPointFinal, String> Z; 

    ObservableList<MyPointFinal> data = FXCollections.observableArrayList(
        new MyPointFinal(id, x, y, z)); 

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

     Id.setCellValueFactory(new PropertyValueFactory<MyPointFinal, String>("Id")); 
     Id.setCellFactory(TextFieldTableCell.forTableColumn()); 
     X.setCellValueFactory(new PropertyValueFactory<MyPointFinal, String>("X")); 
     X.setCellFactory(TextFieldTableCell.forTableColumn()); 
     Y.setCellValueFactory(new PropertyValueFactory<MyPointFinal, String>("Y")); 
     Y.setCellFactory(TextFieldTableCell.forTableColumn()); 
     Z.setCellValueFactory(new PropertyValueFactory<MyPointFinal, String>("Z")); 
     Z.setCellFactory(TextFieldTableCell.forTableColumn()); 
     tableCoord2.setItems(data); 

    } 

} 
<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.TableColumn?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.VBox?> 

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="500.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Interface.ControllerForFinalPoint"> 
    <children> 
     <TableView fx:id="tableCoord2" editable="true" prefHeight="558.0" prefWidth="600.0"> 
     <columns> 
      <TableColumn fx:id="Id" prefWidth="75.0" text="Name" /> 
      <TableColumn fx:id="X" prefWidth="150.0" text="X" /> 
      <TableColumn fx:id="Y" prefWidth="150.0" text="Y" /> 
      <TableColumn fx:id="Z" prefWidth="150.0" text="Z" /> 
     </columns> 
     </TableView> 
     <AnchorPane prefHeight="59.0" prefWidth="700.0"> 
     <children> 
      <Button layoutX="118.0" layoutY="34.0" mnemonicParsing="false" text="Save" AnchorPane.bottomAnchor="17.0" AnchorPane.leftAnchor="325.0" AnchorPane.rightAnchor="325.0" AnchorPane.topAnchor="17.0" /> 
     </children> 
     </AnchorPane> 
     <AnchorPane prefHeight="38.0" prefWidth="600.0" /> 
    </children> 
</VBox> 

Antwort

0

ich denke, das Problem ist, dass Methoden nicht in der Reihenfolge aufgerufen werden Sie denken. Zuerst javafx schafft die Instanz, und initialisiere daher das Feld ObservableList data mit den Variablen 'id', 'x', 'y', 'z'. Danach ruft javafx die Methode initialize() auf, die die erwähnte ObservableList verwendet. Danach kannst du intoarcere() aufrufen die Felder, die zuvor zum Aufbau des Obse verwendet wurden rvableList Inhalt .... (whoops).

Also die tatsächliche MyPointFinal-Instanz ist da (wie bestätigt, wenn Sie ihren Inhalt protokollieren), obwohl nichts sichtbar ist, da jeder Wert 'null' ist.

Wenn Sie die intoarcere() in den folgenden ändern, sollten Sie Ergebnisse sehen.

public void intoarcere (String id, String x, String y, String z) 
{ 
    this.data.add(new MyPointFinal(id, x, y, z)); 
} 

Ps. Derzeit verwenden Sie Variablennamen mit Groß- und Kleinbuchstaben 'x', 'y' und 'z'. Nicht nur sind 'PascalCased' Variablennamen gegen die allgemeine Namenskonvention, es ist auch verwirrend (für andere, aber auch für dich selbst nach einer Weile). Bitte versuchen Sie sie um Ihrer selbst willen umzubenennen.

+0

tx, für den ersten war es nicht so probleme.i finden Sie heraus, dass meine Daten, die in meine Liste gehen sollten, Null war, ich muss die Methode in die andere Richtung aufrufen oder etwas anderes tun, als für das "PS" danke ich werde es mir merken. –