2015-01-16 1 views
0

Мне нужен стол столбец с кнопкой «Добавить в список воспроизведения». Строка в столбце представляет собой песню. У меня есть следующий класс:Использование кнопки в таблицеКолонка, чтобы добавить песню в плейлист javafx

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().);' Есть ли способ сделать это?

Суть вопроса в том, как получить информацию о ячейке и добавить эту информацию в наблюдаемый список?

Благодаря

ответ

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 использует этот подход.

+0

ha Я продолжаю решать некоторые из моих собственных проблем, но я не знаю, как решить следующее: 'ошибка: не найдено подходящего метода для добавления (Object) MusicPlayer.playlist.add (getTableRow(). GetItem()); ^Метод Collection.add (Song) не применим (аргумент несоответствие; объект не может быть преобразован в композицию) метод List.add (Song) не применим (несоответствие аргумента, объект не может быть преобразован в Song) ' –

 Смежные вопросы

  • Нет связанных вопросов^_^