2016-07-24 10 views
0

Ich mache eine Einkaufsliste App, und es hat die Funktion, Elemente zur Liste (eine Tabellenansicht) zusammen mit der Anzahl der Artikel und Preis. Die Sache ist, es funktioniert (weil die Tabellenansicht nicht sagt "Kein Inhalt in der Tabelle") Aber die Tabelle ist leer. Irgendwelche Vorschläge? Code:Beim Versuch, Elemente zu einem JavaFX TableView durch eine ObservableList hinzuzufügen, werden die TableView Elemente nicht angezeigt.

package listproject; 



public class Main extends Application{ 

public Node getNodeByRowColumnIndex(final int row,final int column,GridPane gridPane) { 
    Node result = null; 
    ObservableList<Node> childrens = gridPane.getChildren(); 
    for(Node node : childrens) { 
     if(gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) { 
      result = node; 
      break; 
     } 
    } 
    return result; 
} 

ObservableList<Product> data = 
     FXCollections.observableArrayList(

     ); 

@Override 
public void start(Stage primaryStage) { 
    primaryStage.setTitle("Grocery List"); 
    primaryStage.setWidth(450); 
    primaryStage.setHeight(800); 
    //menu buttons 
    Button addLinkMain = new Button("Add an Item"); 
    Button addLinkTitle = new Button("Add an Item"); 
    Button mainLinkAdd = new Button("Back"); 
    Button mainLinkTitle = new Button("Back"); 
    Button addItem = new Button("Add"); 
    Button setTitleMenu = new Button("Set Title"); 
    Button setTitleAdd = new Button("Set Title"); 
    Button clear = new Button("Clear"); 

    //items for the item addition screen 
    TextField title = new TextField("Name"); 
    TextField quantity = new TextField("#"); 
    TextField price = new TextField("$"); 
    HBox addBox = new HBox(); 
    BorderPane addBorder = new BorderPane(); 
    HBox addMenu = new HBox(); 
    //mainScene items 
    BorderPane pane = new BorderPane(); 

    HBox mainscenemenu=new HBox(); 


    TableView<Product> tableview = new TableView<Product>(); 

    //tableview items 
    TableColumn itemTitle=new TableColumn("Product"); 
    TableColumn itemQuantity=new TableColumn("Quantity"); 
    TableColumn itemPrice=new TableColumn("Price"); 

    //settitle items 
    TextField listTitle= new TextField("Rename the List"); 
    Button setTittle = new Button("Set List Title"); 
    BorderPane setTitlePane=new BorderPane(); 
    StackPane setTitleFieldContainer=new StackPane(); 
    HBox setTitleOwnMenu = new HBox(); 
    //Scene declaration 
    Scene mainScene = new Scene(pane); 
     primaryStage.setScene(mainScene); 
    Scene addScene = new Scene(addBorder); 
    Scene setTitleScene = new Scene(setTitlePane); 
    //Main Scene  
    pane.setCenter(tableview); 
    pane.setBottom(mainscenemenu); 
    tableview.getColumns().addAll(itemTitle,itemQuantity,itemPrice); 
    mainscenemenu.getChildren().addAll(setTitleMenu,clear,addLinkMain); 
    tableview.setItems(data); 
    //Item Addition Scene 
    addBox.getChildren().addAll(title,quantity,price); 
    addMenu.getChildren().addAll(mainLinkAdd,addItem,setTitleAdd); 
    addBorder.setCenter(addBox); 
    addBorder.setBottom(addMenu); 

    //Set Title Scene 
    setTitleFieldContainer.getChildren().addAll(listTitle); 
    setTitleOwnMenu.getChildren().addAll(addLinkTitle,setTittle,mainLinkTitle); 
    setTitlePane.setCenter(setTitleFieldContainer); 
    setTitlePane.setBottom(setTitleOwnMenu); 
    //Menu Button Event Handlers 
    addLinkMain.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(addScene); 
     } 
    }); 
    addLinkTitle.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(addScene); 
     } 
    }); 
    mainLinkAdd.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(mainScene);   
     } 
    }); 
    mainLinkTitle.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(mainScene);   
     } 
    }); 
    setTitleMenu.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(setTitleScene);   
     } 
    }); 
    setTitleAdd.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent e) { 
      primaryStage.setScene(setTitleScene);   
     } 
    }); 

    //Adding an Item to the List *unfinished 
    addItem.setOnAction(new EventHandler<ActionEvent>(){ 


     @Override 
     public void handle(ActionEvent event) { 

      data.add(new Product(title.getText(),quantity.getText(),price.getText())); 

     } 

    }); 

    //Changing the Title of The List 

    setTittle.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      primaryStage.setTitle(listTitle.getText()); 
     } 

    }); 

    //Clearing the List 

    clear.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      tableview.getItems().clear(); 
     } 

    }); 

    //Show the Stage 
    primaryStage.show(); 
} 

public static void main(String[] args){ 
    launch(args); 
} 

}

Antwort

1

Sie nie die cellValueFactory s für den Spalten der Tabelle gesetzt. Sie müssen dies tun, um den Teil der Elemente anzugeben, der in der Spalte angezeigt werden soll. Ein Beispiel mit anonymen Klassen wie cellValueFactory s finden Sie hier.

Die Verwendung von PropertyValueFactory könnte den benötigten Code reduzieren. Mehr dazu hier.

Ein Tutorial finden Sie hier: https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/table-view.htm

Verwandte Themen