Как изменить цвет JavaFX TableCell, когда он выбран?

Итак, я создал собственный TableCell для своего TableView. Эта настраиваемая ячейка TableCell содержит ссылку и открывает браузер при нажатии. Все работает нормально, я хочу изменить цвет текста этой TableCell, когда она выбрана ... Вот что я пытаюсь сделать:

    callback = new Callback<TableColumn, TableCell>(){
        @Override
        public TableCell call(TableColumn param) {
            return new TableCell<Test, String>(){
                EventHandler handler = new EventHandler<MouseEvent>() {
                    final AM_RSS_FX RSS = AM_RSS_FX.this;
                    @Override
                    public void handle(MouseEvent param) {
                        try {
                            java.awt.Desktop.getDesktop().browse(new URI(RSS.link));
                        } catch (IOException | URISyntaxException ex) {
                            Logger.getLogger(AM_RSS_FX.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                };
                @Override
                public void updateItem(String item, boolean empty){
                    super.updateItem(item, empty);
                    if(!isEmpty()){
                        final AM_RSS_FX RSS = AM_RSS_FX.this;
                        this.setTextFill(Color.BLUE);
                        setText(item);
                        RSS.link = this.getText();
                        this.addEventHandler(MouseEvent.MOUSE_CLICKED, handler);
                    }
                }

                @Override
                public void updateSelected(boolean arg0){
                    super.updateSelected(arg0);
                    if(isSelected()){
                        this.setTextFill(Color.AQUA);
                    }
                }

            };
        }
    };

Я не знаю, какой метод мне нужно переопределить = / Я пытался переопределить updateSelected, но не сработало = /

Кто-нибудь может мне помочь?


person Thunderbert    schedule 30.08.2012    source источник


Ответы (1)


1- Вы добавляете обработчик событий мыши в экземпляр TableCell, и это событие запускается, когда вы нажимаете на него. Однако ячейка таблицы по-прежнему не выбирается. Вместо этого активизируется выделение ячеек строки таблицы. Чтобы включить выделение ячеек, выполните:

table.getSelectionModel().setCellSelectionEnabled(true);

2- Нет необходимости переопределять updateSelected() для управления стилем, вместо этого используйте селекторы CSS из caspian.css:

.table-cell:selected {
    -fx-background-color: lightgreen;
    -fx-text-fill: green;
}
person Uluk Biy    schedule 01.09.2012