2015-07-08 2 views
2

Я новичок в JavaFX 8 и попытался реализовать TreeTableView с некоторыми элементами управления jfxtras во втором и третьем столбцах. Поэтому я установил клеточные фабрики этих столбцов с помощью специальных TreeCells, например. как это:JavaFX TreeTableView настраиваемый TreeCell с элементами управления

col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() { 
     @Override 
     public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) { 
      TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() { 
       private ColorPicker colorPicker = new ColorPicker(); 
       @Override 
       protected void updateItem(String t, boolean bln) { 
        super.updateItem(t, bln);    
        setGraphic(colorPicker);       
       } 
      }; 
      return cell; 
     } 
    }); 

Теперь я могу видеть ColorPickers и их можно использовать, но колонку как-то не реагирует на расширение или рушится узлы столбца 1 (который показывает информацию Струнный из POJOs). Так, например, если я разрушаю все дерево, в третьем столбце показывается все ColorPickers.

Итак, что еще необходимо для синхронизации столбцов?

спасибо !!

+0

Я не ожидаю, что JFXtras контролировать что-то особенное реализовано за оказанные в таблице. TreeViewTable должен IMHO заботиться о скрытии или показе (содержимого его) ячеек. – tbeernot

+0

На самом деле я выбрал неправильный контроль для своего сообщения - ColorPicker не из jfxtras. Но это то же самое, например. с элементом управления LocalTimeTextField. Значит, вы имеете в виду, что TreeTableView просто не способен обрабатывать элементы управления? Или есть что-то еще, что я мог бы попробовать ...? – clic

+0

Он может справиться с этим просто отлично: проблема в том, что вы говорите всем ячейкам (даже пустым) использовать элемент управления в качестве графического. Вам нужно специально установить графику, только если ячейка не пуста. См. Ответ ... –

ответ

0

Когда элемент, отображаемый ячейкой, изменяется, вызывается метод updateItem(...). Если ячейка пуста (например, потому что пользователь свернул ячейки выше), вторым параметром будет true; вам нужно проверить это и отключить графику.

Итак:

col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() { 
     @Override 
     public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) { 
      TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() { 
       private ColorPicker colorPicker = new ColorPicker(); 
       @Override 
       protected void updateItem(String item, boolean empty) { 
        super.updateItem(item, empty); 
        if (empty) { 
         setGraphic(null); 
        } else {    
         setGraphic(colorPicker);  
        }     
       } 
      }; 
      return cell; 
     } 
    }); 
+0

ОК спасибо! это решило проблему с пустыми ячейками! Но все же, когда я делаю сбой/разворачивание, colorPickers не отображаются в правильной строке. – clic