0

我想要一个带有“添加到播放列表”按钮的表格列。列中的行代表一首歌曲。我有以下课程:

private class ButtonCell extends TableCell<Record, Boolean> {
    final Button cellButton = new Button("Add to PlayList");

    ButtonCell(){

        cellButton.setOnAction(new EventHandler<ActionEvent>(){

            @Override
            public void handle(ActionEvent t) {
                // do something when button clicked
                //playList.add(this.getTableRow().getItem());
            }
        });
    }

    //Display button if the row is not empty
    @Override
    protected void updateItem(Boolean t, boolean empty) {
        super.updateItem(t, empty);
        if(!empty){
            setGraphic(cellButton);
        }
    }
}

EventHandler<ActionEvent> btnNewHandler = 
        new EventHandler<ActionEvent>(){

    @Override
    public void handle(ActionEvent t) {


    }
};

我希望能够做到这一点'playList.add(this.getTableRow().getItem());' 有没有办法做到这一点?

问题的要点是如何获取单元格的信息并将该信息添加到可观察列表中?

谢谢

4

1 回答 1

0

出于某种原因,getTableRow()返回一个原始TableRow对象,而不是一般类型的对象。换句话说,方法签名是

public class TableCell<S,T> {
    public TableRow getTableRow();
}

当我认为应该是

public class TableCell<S,T> {
    public TableRow<S> getTableRow();
}

因此,表达式getTableRow().getItem()具有编译时类型Object,而不是与表相同的类型(Record在您的示例中),因此您需要向下转换。这应该可以工作(假设您按照我的预期设置了其他所有内容):

playList.add((Record) this.getTableRow().getItem() );

完全不同的技术是制作列 type Record,因此您可以getItem()直接在单元格上调用。这个问题的答案使用了这种方法。

于 2015-01-16T19:59:17.023 回答