为什么我的桌子没有填充?

时间:2016-09-14 07:00:12

标签: java mysql javafx

我知道那里有数据,因为当我遍历列表时,我可以看到我的所有数据都存在。即使只是打印我的数据似乎很好,但我只是不知道为什么它似乎不能让它出现

我填充数据库的方法:

    protected void populateDatabase() throws SQLException {
        empInfoTable = new TableView<>();



        empIDColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("employeeID"));
        fNameColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("firstName"));
        lNameColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("lastName"));
        gNameColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("groupName"));
        hoursColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("estimatedHours"));
        payColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("estimatedPay"));



        List<EmployeeMaster> empList = getEmpFromDatabase();
        Iterator<EmployeeMaster> iterator = empList.iterator();
        System.out.print(iterator.next());

        empInfoTable.getItems().addAll(empList);
        //System.out.print(empInfoTable.getItems());

    }

从数据库中抓取数据的方法

    private List<EmployeeMaster> getEmpFromDatabase() throws SQLException {
        List<EmployeeMaster> row = new ArrayList<EmployeeMaster>();
        Connection connect = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/AUStudentEmployees", "root",
                "password");

        Statement stmnt = connect.createStatement();
        ResultSet result = stmnt.executeQuery("select * from emp_info ORDER by EmployeeID");
            while(result.next()){

            String empID = result.getString("EmployeeID");
            String fName = result.getString("FirstName");
            String lName = result.getString("LastName");
            String gName = result.getString("GroupName");
            String hours = result.getString("EstimatedHours");
            String pay = result.getString("EstimatedPay");

            EmployeeMaster empInfo = new EmployeeMaster(empID, fName, lName, gName, hours, pay);
            row.add(empInfo);
            //empInfoTable.getItems().addAll(row);
            //System.out.print(row);
        }
        return row;
    }

具有所有字符串属性的类:

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class EmployeeMaster {

    public EmployeeMaster(){

    }

    private final StringProperty employeeID = new SimpleStringProperty(this, "EmployeeID");
    private final StringProperty firstName = new SimpleStringProperty(this, "FirstName");
    private final StringProperty lastName = new SimpleStringProperty(this, "LastName");
    private final StringProperty groupName = new SimpleStringProperty(this, "GroupName");
    private final StringProperty estimatedHours = new SimpleStringProperty(this, "EstimatedHours");
    private final StringProperty estimatedPay = new SimpleStringProperty(this, "EstimatedPay");

    public StringProperty employeeIDProperty(){
        return employeeID;
    }
    public StringProperty firstNameProperty(){
        return firstName;
    }
    public StringProperty lastNameProperty(){
        return lastName;
    }
    public StringProperty groupNameProperty(){
        return groupName;
    }
    public StringProperty estimatedHoursProperty(){
        return estimatedHours;
    }
    public StringProperty EstimatedPayProperty(){
        return estimatedPay;
    }

    public final String getEmployeeID() {
        return employeeIDProperty().get();
    }
    public final String getFirstName() {
        return firstNameProperty().get();
    }
    public final String getLastName() {
        return lastNameProperty().get();
    }
    public final String getGroupName() {
        return groupNameProperty().get();
    }
    public final String getEstimatedHours() {
        return estimatedHoursProperty().get();
    }
    public final String getEstimatedPay() {
        return EstimatedPayProperty().get();
    }

    public final void setEmployeeID(String EmployeeID){
        employeeIDProperty().set(EmployeeID);
    }
    public final void setFirstName(String fName){
        firstNameProperty().set(fName);
    }
    public final void setLastName(String lName){
        lastNameProperty().set(lName);
    }
    public final void setGroupName(String gName){
        groupNameProperty().set(gName);
    }
    public final void setEstimatedHours(String EstimatedHours){
        estimatedHoursProperty().set(EstimatedHours);
    }
    public final void setEstimatedPay(String EstimatedPay){
        EstimatedPayProperty().set(EstimatedPay);
    }

    public EmployeeMaster(String EmployeeID, String fName, String lName, String gName,
            String EstimatedHours, String EstimatedPay){

        setEmployeeID(EmployeeID);
        setFirstName(fName);
        setLastName(lName);
        setGroupName(gName);
        setEstimatedHours(EstimatedHours);
        setEstimatedPay(EstimatedPay);
    }

}

编辑:fxml文件

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

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

<AnchorPane prefHeight="300.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="studentempsignin.Admin_Controller">
   <children>
      <TableView layoutX="25.0" layoutY="29.0" onSort="#populateDatabase" prefHeight="166.0" prefWidth="600.0">
        <columns>
          <TableColumn fx:id="empIDColumn" prefWidth="100.0" text="Employee ID" />
          <TableColumn fx:id="fNameColumn" prefWidth="100.0" text="First Name" />
            <TableColumn fx:id="lNameColumn" prefWidth="100.0" text="Last Name" />
            <TableColumn fx:id="gNameColumn" prefWidth="100.0" text="Group" />
            <TableColumn fx:id="hoursColumn" prefWidth="100.0" text="Hours" />
            <TableColumn fx:id="payColumn" prefWidth="100.0" text="Pay" />
        </columns>
      </TableView>
   </children>
</AnchorPane>

3 个答案:

答案 0 :(得分:2)

您的populateDatabase()方法会创建一个新的TableView并填充它,而不是填充您在FXML文件中定义的那个。

删除行

empInfoTable = new TableView<>();

并将表格注入控制器,方法与对列等相同(注意fx:id):

  <TableView fx:id="empInfoTable" layoutX="25.0" layoutY="29.0" onSort="#populateDatabase" prefHeight="166.0" prefWidth="600.0">

@FXML
private TableView<EmployeeMaster> empInfoTable ;

答案 1 :(得分:0)

在populateDatabase()方法中,您将创建一个新的TableView对象。您需要将TableColumn对象添加到这个新创建的TableView对象,例如像这样

empInfoTable.getColumns().add(empIDColumn);

与其他专栏相似。

编辑1 除此之外,这些属性的名称与您在EmployeeMaster中的名称不匹配。

new PropertyValueFactory<EmployeeMaster, String>("employeeID")

将查找名为&#39; employeeIDProperty&#39;的属性。请参阅https://docs.oracle.com/javafx/2/api/javafx/scene/control/cell/PropertyValueFactory.html或此处How to use the PropertyValueFactory correctly?

答案 2 :(得分:0)

  • 而不是使用ListArrayList制作ObservableArrayList并将项目添加到其中,以便更改立即反映到TableView:

    ObservableList<EmployeeMaster> data = FXCollections.observableArrayList( );
    table.setItems(data);
    
  • 请注意,方法EstimatedPayProperty()必须为estimatedPayProperty()。同样在构造函数中使用camelCase并使用(this。)

  • 建议您遵循此tutorial

  • 的最佳做法
  • 此外,您可以在此处进行改进,例如:

    empIDColumn.setCellValueFactory(new PropertyValueFactory<EmployeeMaster, String>("employeeID"));
    

    为:

    empIDColumn.setCellValueFactory(new PropertyValueFactory<>("employeeID"));