2016-07-24 4 views
0

私は食料雑貨品リストアプリケーションを作成していますし、アイテムをリスト(テーブルビュー)にアイテム数と価格。それは動作します(テーブルビューでは「テーブルにコンテンツがありません」という理由があります)。しかし、テーブルは空白です。助言がありますか? コード:ObservableListを介してJavaFX TableViewにアイテムを追加しようとすると、TableViewアイテムが表示されません

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); 
} 

}

答えて

1

あなたは、テーブルの列に対してcellValueFactory Sを設定することはありません。列に表示される項目の一部を指定するには、これを行う必要があります。

匿名クラスがcellValueFactoryである例がここにあります。

PropertyValueFactoryを使用すると、必要なコード量を減らすことができます。詳細はこちら

チュートリアルはこちらからhttps://docs.oracle.com/javase/8/javafx/user-interface-tutorial/table-view.htm

関連する問題