使用tableColumn中的按钮将歌曲添加到播放列表javafx

时间:2015-01-16 19:18:41

标签: javafx tablecolumn

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

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());' 有没有办法做到这一点?

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

由于

1 个答案:

答案 0 :(得分:0)

出于某种原因,getTableRow()会返回原始TableRow对象,而不是通常键入的对象。换句话说,方法签名是

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

当我认为它应该是

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

因此,expresison getTableRow().getItem()的编译时类型为Object,而不是与表格中的相同类型(示例中为Record),因此您需要沮丧。这应该有效(假设您按照我的预期设置了其他所有内容):

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

完全不同的技术是使列类型为Record,因此您只需直接在单元格上调用getItem()即可。 The answer to this question使用此方法。