Dynamic Javafx动态表
我想用TableView类创建动态表 我将列数(int)、列名(String[])和行数(Student)发送给承包商,但我无法处理这些。 我需要如何为每一列定义TableColumnDynamic Javafx动态表,dynamic,javafx,tableview,Dynamic,Javafx,Tableview,我想用TableView类创建动态表 我将列数(int)、列名(String[])和行数(Student)发送给承包商,但我无法处理这些。 我需要如何为每一列定义TableColumn public class DynamicTable extends TableView<Student>{ private ObservableList<Student> data; private int columnCount; private String[] columnName
public class DynamicTable extends TableView<Student>{
private ObservableList<Student> data;
private int columnCount;
private String[] columnName;
private TableView<Student> tableView;
DynamicTable(){
}
DynamicTable(int columnCount, Student[] rows, String[] columnName){
this.columnName=columnName;
this.columnCount=columnCount;
data = FXCollections.observableArrayList();
setData(rows);
}
public void buildTable(){
for(int i=0 ; i<columnCount; i++){
final int j=i;
TableColumn<Student,String> col = new TableColumn<Student,String>(columnName[i]);
//col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Student,String>, ObservableValue<String>>() {
//@Override
//public ObservableValue<String> call(
// CellDataFeatures<Student, String> param) {
// return new SimpleStringProperty(param.getValue().getAddress());
// }
//});
tableView.getColumns().addAll(col);
tableView.setItems(data);
}
}
public void setData(Student[] rows){
data.setAll(rows);
}
public String[] getColumnName(){
return this.columnName;
}
}
public类DynamicTable扩展了TableView{
私有可观测列表数据;
私有int列计数;
私有字符串[]列名称;
私有TableView TableView;
动态的{
}
DynamicTable(int columnCount、Student[]行、String[]columnName){
this.columnName=columnName;
this.columnCount=columnCount;
data=FXCollections.observearraylist();
设置数据(行);
}
公共void buildTable(){
对于(int i=0;i首先,您需要向Student
类添加属性访问器方法:
public class Student {
private final SimpleStringProperty firstName ;
// etc ...
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
// Add methods like this:
public StringProperty firstNameProperty() {
return firstName ;
}
// ... etc
}
然后,您的单元格值工厂将如下所示:
TableColumn<Student,String> col = new TableColumn<Student,String>(columnName[i]);
col.setCellValueFactory(cellData -> {
Student student = cellData.getValue();
return student.xxxProperty();
});
TableColumn col=新的TableColumn(columnName[i]);
col.setCellValueFactory(cellData->{
Student=cellData.getValue();
返回学生。xxxProperty();
});
替换xxxProperty()的位置
的实际属性,该属性的值要显示在该列中。表中的每一行表示一个Student
对象。因此,每一列都必须定义如何将Student
对象映射到要显示在单元格中的值。现在,关于这些列的所有信息都是名称和索引。您的Student
类的外观以及如何使用列名和/或索引从Student
中获取值以显示在单元格中?@James_D我添加了Student类。好的,好的,但您还需要回答我的第二个问题:给定单元格中将显示什么?现在您对该单元格的所有了解是:aStudent
表示单元格所在行的对象。A字符串
表示列标题文本。列的索引。您需要从该信息获取单元格的值。@James\u D如何定义映射?通过Student类上的“get”函数?谢谢。那么“tableView.getColumns().addAll(col)”呢?因为我想成为一个动态表,“单元格值工厂”在for循环中,我创建了“get”函数来获取列的索引并返回列的StringProperty。对不起,我不知道你的意思。我需要使用“addAll(col)”,用于添加列?是的,您仍然需要该行。因为您一次只添加一行,所以您可以执行add(…)
而不是addAll(…)
。我得到了以下示例:“javaNetFinal.DaynamicTable.buildTable(DynamicTable.java:40)的应用程序启动方法java.lang.NullPointerException中的异常”:(
TableColumn<Student,String> col = new TableColumn<Student,String>(columnName[i]);
col.setCellValueFactory(cellData -> {
Student student = cellData.getValue();
return student.xxxProperty();
});