Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JavaFX TableView, Button в TableView 
:(
    Опции темы
huzik
Дата 10.9.2011, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.9.2011

Репутация: нет
Всего: нет



Скажите пожалуйста, как поместить кнопку или любой другой элемент управления в ячейку TableView?
PM MAIL   Вверх
AlexeyVorotnikov
Дата 12.9.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 3
Всего: 18



Вы используете JavaFX 2.0 beta? (На сколько я помню, в 1.3 TableView не было)

Скорее всего придётся использовать кастомные TableCell и cellFactory.
Т.е. в TableView устанавливается cellFactory, которая возвращает TableCell'ы, которые содержат нужные контролы.

Про работу с TableView можно почитать здесь: TableView


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Evribiad
Дата 8.1.2012, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.9.2009

Репутация: нет
Всего: нет



Цитата(huzik @ 10.9.2011,  02:31)
Скажите пожалуйста, как поместить кнопку или любой другой элемент управления в ячейку TableView?

Добрый вечер.

Немного странно задан вопрос
Непонятно с чем конкретно у затруднения и что за ответ нужен.
Но тем не менее.

И так ... надеюсь я верно понял и речь о JavaFX 2.0 

Предположим мы хотим добавить просто кнопку в табличку, которая по щелчку будет загружать в какую то панель данные с целью редактирования

У нас есть сам компонент и список для наблюдения

 
Код

  private TableView<CardView> cardSet;
    private ObservableList<CardView> cardViewsList;


Далее метод добавляет колонку с кнопкой

Обратите внимание что возвращает метод call

Код

private void setOpenCardColumn() {

        openCardColumn = new TableColumn<CardView, Long>("");
        Callback<TableColumn<CardView, Long>, TableCell<CardView, Long>> flattenCellFactory1 =
                new Callback<TableColumn<CardView, Long>, TableCell<CardView, Long>>() {

                    public TableCell call(TableColumn p) {
                        return new CellDataControlCards("Откр.");
                    }
                };
        openCardColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<CardView, Long>, ObservableValue<Long>>() {

            public ObservableValue<Long> call(TableColumn.CellDataFeatures<CardView, Long> p) {
                // p.getValue() returns the Person instance for a particular TableView row
                // StringProperty firstName = new SimpleStringProperty(p.getValue().getSelected()));
                ObservableValue<Long> value = new SimpleObjectProperty<Long>(p.getValue().getCard_id());

                return value;
            }
        });

        openCardColumn.setCellFactory(flattenCellFactory1);
        openCardColumn.setMinWidth(120);
        openCardColumn.setMaxWidth(120);
    }


И разумеется сам компонент ячейка который будет отображаться

Код

public class CellDataControlCards extends TableCell<CardView, Long> {

    private ToggleButton flatten;

    public CellDataControlCards(String caption) {
        createFlatten(caption);
    }

    @Override
    protected void updateItem(Long item, boolean bln) {
        super.updateItem(item, bln);
        Object object = this.getGraphic();
        if (object instanceof ToggleButton) {

            flatten = (ToggleButton) object;
            if (item == null) {

                flatten.setDisable(true);
                // button.setSelected(false);
            } else {
                flatten.setDisable(false);
                // button.setSelected(item == Boolean.TRUE ? true : false);
                // commitEdit(item);
            }
        }
    }
    
    private CardViewWrapper createWrapper(CardView cardView) {
        final CardView view = cardView;
        if (flatten == null) {
            return null;
        }
        
        CardViewWrapper wrapper = new CardViewWrapper() {

            @Override
            public CardView getCardView() {
                return view;
            }

            @Override
            public void eventOfHide() {
                if (flatten.isSelected() == true) {
                    flatten.setSelected(false);
                }
            }
        };
        return wrapper;
    }

    private void showCard() {

        Long item = this.getItem();
        //Не буду загружать подробностями как эта карточка будет отображена )
     
    }

    private void createFlatten(String caption) {

        Image image = new Image(getClass().getResourceAsStream("imagery//data-controls-icon.png"));

        ImageView image1 = new ImageView(image);
        flatten = new ToggleButton(caption, image1);

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

            @Override
            public void handle(ActionEvent e) {
                // Image image = new Image(getClass().getResourceAsStream("imagery//accept.png"));
                // ImageView image1 = new ImageView(image);
                // flatten.setGraphic(image1);
                showCard();
            }
        });

        final DropShadow shadow = new DropShadow();
//Для красоты можно добавить теней )
        flatten.addEventHandler(MouseEvent.MOUSE_ENTERED,
                new EventHandler<MouseEvent>() {

                    @Override
                    public void handle(MouseEvent e) {
                        flatten.setEffect(shadow);
                    }
                });

        flatten.addEventHandler(MouseEvent.MOUSE_EXITED,
                new EventHandler<MouseEvent>() {

                    @Override
                    public void handle(MouseEvent e) {
                        flatten.setEffect(null);
                    }
                });
        setGraphic(flatten);

    }
}


Аналогичным образом в принципе можно добавить любой контролл ...

Надеюсь что может хоть кому то мой маленький очерк окажется полезным :_)





PM MAIL WWW ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.