在javafx中,不显示表视图
//数据库已成功连接 我正在尝试创建一个表,其中我希望在Javafx的tableView中显示我的“student”表的内容,但无法获得所需的输出在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
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的私有成员,并且可以工作。