JTree с флажками

голоса
12

Мне нужно добавить флажки для JTree. Обычай TreeCellRenderer / TreeCellEditor кажется, правильный подход. До сих пор я использовал подход CheckBoxNodeRenderer в этой веб - странице . Он работает нормально за исключением двух вещей:

  1. есть дополнительный пробел выше + ниже флажка; Я хотел бы, чтобы держать его так же, как обычный JTree.
  2. Я хотел бы провести различие между нажатием на саму флажком (который должен попытаться переключить флажок) и нажмите на текст, связанный с флажком (что должно позволить прослушиватель события интерпретировать это как щелчок на соответствующем узле дерева и предпринимать любые действия, Уместно)

есть способ сделать это? Я огляделся JTrees с флажками, не может найти много. Jide выглядит хорошо, но мне нужно использовать свободное программное обеспечение с открытым исходным кодом (GPL не нормально, LGPL нормально) в этом случае. (Или создать свой собственный флажок дерево)

Задан 03/08/2009 в 17:06
источник пользователем
На других языках...                            


4 ответов

голоса
7

Что касается # 2, вы могли бы сделать панель стать редактором / визуализатор, и добавить метку вместе с флажком - метка будет текст, а флажок не будет текст добавлен к нему.

Ответил 03/08/2009 в 18:00
источник пользователем

голоса
4

за @aperkins предложение это то, что я в конечном итоге делает в TableCellRenderer, кажется, работает хорошо:

final private JPanel nodeRenderer = new JPanel();
final private JLabel label = new JLabel();
final private JCheckBox check = new JCheckBox();

     ...

// in constructor:
final Insets inset0=new Insets(0,0,0,0);        
this.check.setMargin(inset0);
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST);
this.nodeRenderer.add(this.label, BorderLayout.CENTER);

Ключи для избавления от нежелательного пространства на полях, кажется (а) вызов JCheckBox.setMargin (), чтобы уменьшить наценку флажка, и (б) с использованием BorderLayout для JPanel.

Ответил 03/08/2009 в 20:35
источник пользователем

голоса
9

Я знаю, что этот вопрос был дан ответ уже, но я просто хочу, чтобы прояснить некоторые моменты:

1) Jide Common Layer двойственна лицензией (GPL с исключением и пути к классам свободной коммерческой лицензии). Это означает , что вы можете использовать общий проект слоя без каких - либо проблем с лицензированием. Пожалуйста , проверьте ссылку , чтобы подтвердить: http://www.jidesoft.com/products/oss.htm . Общий слой включает в себя реализацию триггерной JTree (com.jidesoft.swing.CheckBoxTree).

2) Там в блоге датированы 2005 от самого Мастера, Сантош Кумар, где он объясняет , как реализовать JTree с флажками с требованиями упомянутых вами: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Это стоит прочитать это, на мой взгляд.

Ответил 20/02/2012 в 13:16
источник пользователем

голоса
2

Я выпустил автономный дерево Качели Checkbox проект, доступный от Maven Central как org.scijava:swing-checkbox-tree.

Пакет основан на Джона Zukowski в Sample CheckBox узла дерева кода. Это BSD-2-лицензирован без зависимостей.

Это позволяет смешивать и согласование DefaultMutableTreeNodeи CheckBoxNodeDataтип узлов. Она также позволяет проверить узлы коробки как не двустворчатых узлов.

Что касается выпуска на вопрос № 1: Я не проверял на все платформы, но на моем OS X систем CheckBoxNodeDataузлов точно такие же высоты в пикселях как DefaultMutableTreeNodeузлы.

Что касается выпуска на вопрос в # 2: он использует JCheckBox+ JLabelв JPanel(как aperkins предполагает) , чтобы различать , нажав на флажок (чтобы проверить / снимите узел) по сравнению с этикеткой (выбрать узел).

Примеры использования:

Последний пример также имеет код рекурсивно переключая поддеревьев в ответ на ящики проверяются или бесконтрольно (см treeNodesChangedметод).

Ответил 12/10/2012 в 20:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more