在javafx中,不显示表视图

在javafx中,不显示表视图,javafx,tableview,javafx-8,Javafx,Tableview,Javafx 8,//数据库已成功连接 我正在尝试创建一个表,其中我希望在Javafx的tableView中显示我的“student”表的内容,但无法获得所需的输出 ObservableList<Student> list = FXCollections.observableArrayList(); @FXML //Initializes the controller class. @Override public void initialize(URL url, ResourceBundle rb

//数据库已成功连接 我正在尝试创建一个表,其中我希望在Javafx的tableView中显示我的“student”表的内容,但无法获得所需的输出

ObservableList<Student> list = FXCollections.observableArrayList();

@FXML
//Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb)
{
    // TODO
    initCol();
    loadTable();
}

//A view Table has been made with fx:id-table
//Variable name for 2 columns are 'fx:id-rollnoColand' & 'fx:id-nameCol'

@FXML
private TableView<Student> table;

@FXML
private TableColumn<Student,String> rollnoCol;    
@FXML
private TableColumn<Student,String> nameCol;

private void initCol()
{
    rollnoCol.setCellValueFactory(new PropertyValueFactory<>("s_rollno"));
    nameCol.setCellValueFactory(new PropertyValueFactory<>("s_name"));
}

//Name of the Table is 'student' with Columns 'rollno' and 'name'

private void loadTable()
{
    String selectAll = "select * from student"; 
    try
    {
        Statement stmt = connectdb.createStatement();
        ResultSet rs = stmt.executeQuery(selectAll); 

        while(rs.next())
        {
            String getrollno = rs.getString("rollno");
            String getname = rs.getString("name"); 

            list.add(new Student(getrollno,getname));
        }

    }
    catch(SQLException exp)
    {
        System.out.println(exp);
    }        

    table.getItems().setAll(list);
}

public static class Student
{
    private final String s_rollno;
    private final String s_name;

    Student(String rollno,String name)
    {
        this.s_rollno = rollno;
        this.s_name = name;           
    }

}

我以前遇到过这个问题,原因很多。首先,您可以从模型中删除final关键字,因为您的变量正在更改。其次,TableView显示空单元格,因为您在Student类中将变量设置为私有,并且无法从父类中的init方法访问它们。所以您需要添加getter和setter方法来访问这些变量

public static class Student
{
    private  String s_rollno;
    private  String s_name;

    Student(String rollno,String name)
    {
        this.s_rollno = rollno;
        this.s_name = name;           
    }

 public String getS_rollno() {
        return s_rollno;
    }

    public void setS_rollno(String s_rollno) {
        this.s_rollno = s_rollno;
    }

    public String getS_name() {
        return s_name;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }

}
PropertyValueFactory与getter或属性方法一起工作。在您的情况下,您需要在Student类中为属性添加getter,以使PropertyValueFactory能够检索值:

public static class Student {

    private final String s_rollno;
    private final String s_name;

    Student(String rollno, String name) {
        this.s_rollno = rollno;
        this.s_name = name;
    }

    public String getS_rollno() {
        return s_rollno;
    }

    public String getS_name() {
        return s_name;
    }

}

PropertyValueFactory仅适用于属性或getter。字段未加载。非常感谢它的工作。没有迹象表明OP需要可变的学生对象。此外,您可以从封闭类访问内部类的私有成员,只是PropertyValueFactory不是这样工作的…@fabian但是我们删除了getter和setter,我们没有得到任何结果,您如何解释呢?@MenaAlaeddine PropertyValueFactory使用getter或property方法来检索值。无论访问是否可能,它都不会直接处理字段。此外,从init方法进行访问是不相关的,但是声称不能从eclosing类访问内部类的私有成员的说法是完全错误的。您可以使用匿名类/lambda表达式作为cellValueFactory,它只使用Student的私有成员,并且可以工作。