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