2016-10-20 2 views
2

Я попытался добавить число для каждой строки в моем дереве. Дерево и его нумерация работают, но не так велики, так есть ли другой лучший способ реализовать это? потому что, если узел дерева расширен, я должен получить весь расширенный узел дерева и увеличить его нумерацию. Я также использовал TreeViewer для создания дерева.Как создать JFace TreeViewer с нумерацией строк

enter image description here

// base container 
Composite composite = new Composite((Composite) parent, SWT.NONE); 
composite.setLayout(new GridLayout(2, false)); 
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

// The container for numbering in the tree 
Composite numComposite = new Composite(composite, SWT.NONE); 
numComposite.setLayout(new FillLayout(SWT.VERTICAL)); 
numComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); 

// the tree container 
MyTree tree = new MyTree(composite); 
tree.setContentProvider(new ContentProvider()); 

Label test = new Label(numComposite, SWT.NONE); 
test.setText("1"); 
test = new Label(numComposite, SWT.NONE); 
test.setText("2"); 
test = new Label(numComposite, SWT.NONE); 
test.setText("3"); 
test = new Label(numComposite, SWT.NONE); 
test.setText("4"); 
test = new Label(numComposite, SWT.NONE); 
test.setText("5"); 
+0

Использование отдельных меток даст вам проблемы с выравниванием, так как нет гарантии, что высота строки дерева совпадает с высотой/интервалом между ярлыками и будет варьироваться между платформами.Даже на картинке выравнивание уже ускользает. Я не могу придумать хороший способ сделать это. –

+0

Видя 'MyTree', я хотел бы напомнить, что [элементы управления SWT не предназначены для подкласса] (http://stackoverflow.com/questions/4264983/why-is-subclassing-not-allowed-for-many-of -The-сВТ-контроль). –

+0

Возможно, стоит [Сетка туманности] (http://www.eclipse.org/nebula/widgets/grid/grid.php). Это нумерация строк, но, возможно, не так, как вам хотелось бы. Он будет указывать элементы на основе их положения полностью расширенного дерева, а не просто нумерации видимых элементов от 1 до n. – Baz

ответ

4

Я предлагаю начать с пользовательского Canvas управления, который имеет ту же высоту, что и Tree виджета.

Всякий раз, когда изменяется положение вертикальной прокрутки дерева, необходимо перерисовать холст (canvas.redraw()). Для того, чтобы отслеживать такие изменения, некоторые слушатели должны быть добавлены

  • выбор слушателя (tree.getVerticalBar().addSelectionListener()) на полосе прокрутки
  • ключевой слушатель (tree.addKeyListener()), который обновляет Canvas когда навигационные клавиши, такие как Up/Вниз, PgUp/PgDn и т.д. прижаты
  • изменения размера слушателя (tree.addControlListener()), который обновляет размер и содержание холста, когда дерево изменяются
  • ... наверное, еще немного ...

Краска слушатель заказного Canvas может привлечь номера строк. Номер первой строки может быть получен из верхнего индекса (tree.getTopIndex()). Последующие номера строк будут использовать высоту элемента дерева (tree.getItemHeight()) для выравнивания по строкам.


Я загрузил проект выше набросал раствора здесь:

https://gist.github.com/rherrmann/fc248fb01a00fb4fa73187cbbdaf441f

main метод включал, что демонстрирует, что номер строки линейки с небольшим приложением СВТ.

Предпочтительная ширина в настоящее время берется из ширины строки «9999» в текущем шрифте. Но так как максимальное число строк всегда может быть вычислено с помощью getVisibleItemCount(), то не должно быть сложно настроить предпочтительную ширину, чтобы обеспечить достаточное пространство для номеров строк, отображаемых в настоящее время.

Возможно, сложной частью будет определить, когда следует передать родительский элемент Tree и TreeRule после изменения предпочтительной ширины.

Здесь могут быть незначительные сбои, которые необходимо устранить, но в целом код показывает осуществимость этого подхода.

Код в getVisibleItemCount() скопирован с SWT Snippet и затем скорректирован.

+1

+1 Очень хороший пример. Надеюсь, есть хороший способ измерить ширину линейки на основе количества видимых элементов в дереве. – Baz

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