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()、コンパイル時のタイプがあるため、ダウンキャストが必要です。これはうまくいくはずです(私が期待するように他のすべてが設定されていると仮定します):ObjectRecord

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

完全に別の手法は、列を typeにすることです。そのため、セルを直接Record呼び出すことができます。この質問に対する答えは、このアプローチを使用しています。getItem()

于 2015-01-16T19:59:17.023 に答える