无法将值插入tableview - JavaFx [英] Unable to insert values into tableview - JavaFx

查看:145
本文介绍了无法将值插入tableview - JavaFx的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是JavaFx的新手,我正在尝试创建一个tableview,并使用场景构建器创建fxml。如果我运行该程序,表没有获取值。我发现这个问题在某种程度上符合我的要求( javaFX 2.2 - 无法从控制器填充表),但我的代码也与之匹配。但我仍然无法获得表中的值。

I am new to JavaFx and I am trying to create a tableview and fxml is created using scene builder. If I run the program, the table is not getting the values. I found that this question is somehow matching with my requirement (javaFX 2.2 - Not able to populate table from Controller), but my code is matching with that too. But still I am not able to get the values in the table.

我引用了以下视频: http://www.youtube.com/watch?v=HiZ-glk9_LE

我的代码如下,

MainView.java

MainView.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class MainView extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            AnchorPane page = FXMLLoader.load(MainView.class.getResource("MainView.fxml"));
            Scene scene = new Scene(page);
            primaryStage.setScene(scene);
            primaryStage.setTitle("Sample Window"); 
            primaryStage.setResizable(false); 
            primaryStage.show();
        } catch (Exception e) {
        }
    }
}

MainView.fxml

MainView.fxml

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="controller.MainViewController">
  <children>
    <SplitPane dividerPositions="0.535175879396985" focusTraversable="true" orientation="VERTICAL" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
      <items>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
          <children>
            <TableView fx:id="tableID" prefHeight="210.0" prefWidth="598.0" tableMenuButtonVisible="true" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
              <columns>
                <TableColumn minWidth="20.0" prefWidth="40.0" text="ID" fx:id="tID" />
                <TableColumn prefWidth="100.0" text="Date" fx:id="tDate" />
                <TableColumn prefWidth="200.0" text="Name" fx:id="tName" />
                <TableColumn prefWidth="75.0" text="Price" fx:id="tPrice" />
              </columns>
            </TableView>
          </children>
        </AnchorPane>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" />
      </items>
    </SplitPane>
  </children>
</AnchorPane>

MainViewController.java

MainViewController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
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 model.Table;

/**
 * FXML Controller class
 *
 */
public class MainViewController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @FXML
    TableView<Table> tableID;
    @FXML
    TableColumn<Table, Integer> tID;
    @FXML
    TableColumn<Table, String> tName;
    @FXML
    TableColumn<Table, String> tDate;
    @FXML
    TableColumn<Table, String> tPrice;
    int iNumber = 1;
    ObservableList<Table> data =
            FXCollections.observableArrayList(
            new Table(iNumber++, "Dinesh", "12/02/2013", "20"),
            new Table(iNumber++, "Vignesh", "2/02/2013", "40"),
            new Table(iNumber++, "Satheesh", "1/02/2013", "100"),
            new Table(iNumber++, "Dinesh", "12/02/2013", "16"));

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // System.out.println("called");

        tID.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rID"));
        tName.setCellValueFactory(new PropertyValueFactory<Table, String>("rName"));
        tDate.setCellValueFactory(new PropertyValueFactory<Table, String>("rDate"));
        tPrice.setCellValueFactory(new PropertyValueFactory<Table, String>("rPrice"));
        tableID.setItems(data);

    }
}

Table.java

Table.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;


public class Table {

    SimpleIntegerProperty rID;
    SimpleStringProperty rName;
    SimpleStringProperty rDate;
    SimpleStringProperty rPrice;

    public Table(int rID, String rName, String rDate, String rPrice) {
        this.rID = new SimpleIntegerProperty(rID);
        this.rName = new SimpleStringProperty(rName);
        this.rDate = new SimpleStringProperty(rDate);
        this.rPrice = new SimpleStringProperty(rPrice);
        System.out.println(rID);
        System.out.println(rName);
        System.out.println(rDate);
        System.out.println(rPrice);
    } 

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

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

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

    public void setrDate(String d) {
        this.rDate.set(d);
    }

    public String getrName() {
        return rName.get();
    }

    public void setrName(String n) {
         this.rDate.set(n);
    }

    public String getrPrice() {
        return rPrice.get();
    }

    public void setrPrice(String p) {
       this.rPrice.set(p); 
    }
}

提前致谢。

推荐答案

感谢@Uluk Biy。无论他提到什么,都需要改变,我发现我错过了< cellValueFactory> < PropertyValueFactory> FXML文件中每列的< TableColumn> 标记下的标签,如下所示,

Thanks to @Uluk Biy. Whatever he mentioned, that needs to be changed and I found that I missed the <cellValueFactory> and <PropertyValueFactory> tags under the <TableColumn> tag for each columns in the FXML file which is as follows,

<TableColumn minWidth="20.0" prefWidth="40.0" text="ID" fx:id="tID" >
 <cellValueFactory>
    <PropertyValueFactory property="tID" />
  </cellValueFactory>
</TableColumn>

与此类似,所有列都需要像这样更新。

Similar to this, all columns need to be updated like this.

此更改后,代码工作正常。我可以将值添加到行中。 :)

After this change, the code is working fine. I am able to add the values into the row. :)

这篇关于无法将值插入tableview - JavaFx的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆