如何将列表绑定到JavaFX中的TableView?

如何将列表绑定到JavaFX中的TableView?,java,javafx,tableview,observablecollection,Java,Javafx,Tableview,Observablecollection,我想在javaFX中使用带有列表的TableView。它工作到90% 我的问题是,如果我将数据加载到TableView的第二行,我会像加载第一行一样…我想我的foreach有问题 这是我的代码: @FXML private TableView<Ticket> tblTicket = new TableView<>(); ... @Override public void initialize(URL url, ResourceBundle rb) {

我想在javaFX中使用带有列表的TableView。它工作到90%

我的问题是,如果我将数据加载到TableView的第二行,我会像加载第一行一样…我想我的foreach有问题

这是我的代码:

@FXML
    private TableView<Ticket> tblTicket = new TableView<>();

...


@Override
    public void initialize(URL url, ResourceBundle rb) {

        try {
               ...

                tblTicket.getColumns().addAll(Ticket.getColumn(tblTicket));

                tblTicket.setItems(getTicketData());

        } catch (Exception e) {
           ...
        }
    }    


...

public ObservableList<Ticket> getTicketData() {

        //Eine Liste mit allen Tickets
        ObservableList<Ticket> ticketData = FXCollections.observableArrayList();

        ticketData.setAll(new Ticket("1", "Fehler 1", "Meier_A", "01.02.2015", "Offen"));
        ticketData.setAll(new Ticket("2", "Fehler 2", "Schmidt_W", "01.02.2015", "In Bearbeitung"));
        ticketData.setAll(new Ticket("3", "Fehler 3", "Tarasov_W", "01.02.2015", "Geschlossen"));

        return ticketData; 
    }

...
@FXML
private TableView tblTicket=new TableView();
...
@凌驾
公共void初始化(URL、ResourceBundle rb){
试一试{
...
tblTicket.getColumns().addAll(Ticket.getColumn(tblTicket));
setItems(getTicketData());
}捕获(例外e){
...
}
}    
...
公共可观察列表getTicketData(){
//我有艾伦特的票
ObservableList ticketData=FXCollections.observableArrayList();
票务数据集(新票务(“1”、“2月1日”、“梅尔尤A”、“2015年2月1日”、“奥芬”);
票务数据集(新票务(“2”、“费勒2”、“施密特W”、“2015年2月1日”、“比尔贝东”);
票证数据集(新票证(“3号”、“费勒3号”、“塔拉索夫W”、“2015年2月1日”、“Geschlossen”);
返回票证数据;
}
...

我在这段视频中是这样做的,但是我的表是空的。

我认为您只需要在initialize()中设置类似的内容,而不是for循环,并且不需要在
ticketData.size()>0中设置

public void initialize(){//添加在James_D关于initialize()的注释之后
clmID.setCellValueFactory(新属性ValueFactory(“ticketId”);
setCellValueFactory(新的PropertyValueFactory(“ticketName”);
setCellValueFactory(新属性ValueFactory(“ticketLastName”);
setCellValueFactory(新属性ValueFactory(“ticketCategory”);
setCellValueFactory(新的PropertyValueFactory(“ticketFirstName”));
}
编辑:

这里是演示

以下是教程

您的代码在实现中有错误,可能是因为您误解了TableView的工作原理,例如,您不需要为for循环中的每个票据创建单元格值工厂。回顾和-后面的示例似乎正是您试图做的事情。示例13-8似乎是您试图做的事情的完整实现。它怎么解决不了你的问题?这个例子有什么你无法理解或应用的地方,或者与你试图做的不同之处,使它不能立即应用?啊,但是
private void tableView load
不是构造函数。不,我没有tableView的构造函数。。。您的解决方案不起作用:/I在我的cell@Tarasov是的是我的错,我的意思是如果(!initialized){initialized=true;/*setFactories code here*/}
这里是演示:顺便说一句,只需在FXML文件中添加
就容易多了。这看起来像一个控制器类,所以应该在
initialize()
方法中添加。
public void initialize(){ //added after James_D comment about initialize()
    clmID.setCellValueFactory(new PropertyValueFactory<>("ticketId"));
    clmTicketName.setCellValueFactory(new PropertyValueFactory<>("ticketName"));
    clmLastName.setCellValueFactory(new PropertyValueFactory<>("ticketLastName"));
    clmCategory.setCellValueFactory(new PropertyValueFactory<>("ticketCategory"));
    clmFirstName.setCellValueFactory(new PropertyValueFactory<>("ticketFirstName"));
}