2016-07-24 1 views
0

식료품 목록 앱을 만들고 있는데, 목록에 항목을 추가하는 기능 (테이블 뷰)과 품목 수와 가격. 즉, 그것은 작동합니다 (tableview가 "No content in table"이라고 말하기 때문에) 그러나 테이블은 비어 있습니다. 어떤 제안? 코드 :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의를 설정하지 않습니다. 열에 표시해야하는 항목의 부분을 지정하려면이 작업을 수행해야합니다.

cellValueFactory과 같은 익명의 클래스가있는 예제는 여기에서 찾을 수 있습니다.

PropertyValueFactory을 사용하면 필요한 코드의 양을 줄일 수 있습니다. 이것에 대한 자세한 내용은 여기.

자습서는 여기에서 찾을 수 있습니다. https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/table-view.htm

관련 문제