Javafx 如何将数据插入表视图
Javafx how can I insert data to tableview
我对 javafx 有疑问。我有一个项目可以使用 bib 文件。当我想将 class 数据(条目)插入到 table 视图时,我遇到了问题。但它在 table 视图中仍然是空的。操作是键入名称并从 bib 文件中搜索,然后在 Table 视图中显示结果。
谢谢
The gui image
我有一个class
public class Entry implements Comparable<Entry>{
public static final int ignoreOrder=-1;
public static final int OrderByName=0;
public static final int OrderByTitle=1;
public static final int OrderByYear=2;
private String name;
private String title="";
private String year="0";
private int order=OrderByName;
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
public Entry(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
}
填充 table 视图,但它仍然是空的。
@FXML
private TableView<Entry> table_id;
@FXML
private TableColumn<Entry, String> Col_BKey;
@FXML
private TableColumn<Entry, String> Col_counts;
@FXML
private TableColumn<Entry, String> Col_EntryType;
@FXML
private TableColumn<Entry, String> Col_Title;
@FXML
private TableColumn<Entry, String> Col_Year;
@FXML
private TableColumn<Entry, String> Col_Booktitle;
@FXML
private TableColumn<Entry, String> Col_Author;
public void loadFile(ActionEvent event){
int orderModel=0;
if(title_radio.isSelected()){
orderModel=1;
}else if(year_radio.isSelected()){
orderModel=2;
}
ReadingProcessor readingProcessor=new ReadingProcessor(new OrderedLinkedList(orderModel));
entryList=readingProcessor.read(filePath);
}
public void SelectOKAction(ActionEvent event) {
String searchStr=select_text.getText();
if(searchStr==null||searchStr.trim().equals("")){
AlertBox.display("Wrong", "Please enter entry's name");
return;
}
Entry entry=entryList.search(searchStr);
if(entry==null){//NOT FOOUND
AlertBox.display("Wrong", "Entry not exists!");
}
ObservableList<Entry> list = FXCollections.observableArrayList(entry);
table_id.setItems(list);
}
唯一缺少的是setCellValueFactory
如果您可以将所有字段从 String
更改为 SimpleStringProperty
,例如将 private String title;
更改为 private SimpleStringProperty title
,那么您只需添加
Col_Title.setCellValueFactory(new PropertyValueFactory<Row, String>("title"));
否则你必须查找更复杂的 setCellValueFactory
我对 javafx 有疑问。我有一个项目可以使用 bib 文件。当我想将 class 数据(条目)插入到 table 视图时,我遇到了问题。但它在 table 视图中仍然是空的。操作是键入名称并从 bib 文件中搜索,然后在 Table 视图中显示结果。 谢谢 The gui image
我有一个class
public class Entry implements Comparable<Entry>{ public static final int ignoreOrder=-1; public static final int OrderByName=0; public static final int OrderByTitle=1; public static final int OrderByYear=2; private String name; private String title=""; private String year="0"; private int order=OrderByName; public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public Entry(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } }
填充 table 视图,但它仍然是空的。
@FXML
private TableView<Entry> table_id;
@FXML
private TableColumn<Entry, String> Col_BKey;
@FXML
private TableColumn<Entry, String> Col_counts;
@FXML
private TableColumn<Entry, String> Col_EntryType;
@FXML
private TableColumn<Entry, String> Col_Title;
@FXML
private TableColumn<Entry, String> Col_Year;
@FXML
private TableColumn<Entry, String> Col_Booktitle;
@FXML
private TableColumn<Entry, String> Col_Author;
public void loadFile(ActionEvent event){
int orderModel=0;
if(title_radio.isSelected()){
orderModel=1;
}else if(year_radio.isSelected()){
orderModel=2;
}
ReadingProcessor readingProcessor=new ReadingProcessor(new OrderedLinkedList(orderModel));
entryList=readingProcessor.read(filePath);
}
public void SelectOKAction(ActionEvent event) {
String searchStr=select_text.getText();
if(searchStr==null||searchStr.trim().equals("")){
AlertBox.display("Wrong", "Please enter entry's name");
return;
}
Entry entry=entryList.search(searchStr);
if(entry==null){//NOT FOOUND
AlertBox.display("Wrong", "Entry not exists!");
}
ObservableList<Entry> list = FXCollections.observableArrayList(entry);
table_id.setItems(list);
}
唯一缺少的是setCellValueFactory
如果您可以将所有字段从 String
更改为 SimpleStringProperty
,例如将 private String title;
更改为 private SimpleStringProperty title
,那么您只需添加
Col_Title.setCellValueFactory(new PropertyValueFactory<Row, String>("title"));
否则你必须查找更复杂的 setCellValueFactory