Афоризм
Честь девичью блюла, но не со всеми.
Наталья Резник
Последние статьи

 • Компонент JDatePicker
Описание и пример компонента JDatePicker
сентябрь 2019
 • Компонент Tree
Описание и пример дерева Tree
сентябрь 2019
 • Grid с навигатором
Описание и пример Gridp с навигатором
сентябрь 2019
 • Компонент Grid
Описание и пример Grid библиотеки base-gui
август 2019
 • Библиотека base-gui
Описание компонентов библиотеки base-gui
август 2019
 • Оператор SELECT
Использование SQL-оператора SELECT
август 2019
 • Сокеты в Android
Использование сокетов в Android
июль 2019
 • Многомодульный maven
Пример создания многомодульного maven проекта
июнь 2019
 • Maven плагин launch4j
Создание exe-файла из исполняемого jar
июнь 2019
в помощь разработчикам Swing-приложений

Описание компонента дерева Tree

API (Application Programmer Interface) визуального компонента дерева Tree базового модуля base-gui включает интерфейсы и классы пакета org.jabricks.basegui.tree, представленные в следующей таблице :

ITree интерфейс дерева Tree, API
ITreeListener интерфейс, включающий callback-метод слушателя Tree
TreeRecord базовый класс представления записей в дереве Tree
Tree компонент Tree, реализующий (implements) функции интерфейса ITree

Компонент org.jabricks.basegui.tree.Tree позволяет представить в интерфейсе приложения иерархическую многоуровневую структуру записей, основой которых является базовый класс TreeRecord. API дерева (ITree) позволяет добавлять, обновлять и удалять записи в дереве. При выделении записи в дереве вызывается callback-метод интерфейса ITreeListener.

Конструкторы класса Tree

Компонент дерева Tree имеет два конструктора :

public Tree();
public Tree(final ITreeListener parent);

Во втором конструкторе определяется родитель (parent), реализующий интерфейс ITreeListener. При выделении записи в компоненте дерева вызывается метод интерфейса onClickNode, в котором родителю передается объект выделенной в дереве записи.

Листинг интерфейса ITree

В листинге представлены методы управления деревом :

import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JTree;
import javax.swing.tree.TreeNode;

public interface ITree
{
    // Метод получения JTree в оболочке JScrollPane
    public JComponent asWidget();

    // Метод получения дерева JTree
    public JTree getTree ();

    // Реакция на количество нажатий клавишей мыши
    public void  setClickCount (final int cnt);
    public int   getClickCount();

    // Метод получения выделенной записи
    public Object  getSelectedNodeObject();

    // Метод получения выделенного узла дерева
    public TreeNode  getSelectedNode();

    // Методы управления записями
    public void  addNodeObject    (final Object   object);
    public void  updateNodeObject (final TreeNode   node);
    public void  deleteNodeObject (final TreeNode   node);

    // Метод загрузки в дерево набора данных
    public void  loadData  (List<TreeRecord> list);

    // Методы определения иконок для записей
    public void  setLeafIcon    (final ImageIcon image);
    public void  setClosedIcon  (final ImageIcon image);
    public void  setOpenIcon    (final ImageIcon image);
}

asWidget ()
Метод возвращает дерево JTree, обернутое в скроллинг JScrollPane, для размещения компонента в интерфейсе. Полосы прокрутки появляются в дереве автоматически, когда записи выходят за пределы видимости компонента.

getTree ()
Метод возвращает дерево JTree.

setClickCount (int)
Метод определения количества нажатий клавишей мыши (1 или 2) для вызова родительского callback-метода onClickNode.

getSelectedNodeObject ()
Метод возвращает объект выделенной записи дерева. Компонент Tree хранит объекты в записях иерархической структуры дерева.

getSelectedNode ()
Метод возвращает выделенный узел дерева типа TreeNode.

addNodeObject (Object)
Метод добавления нового объекта в дерево. Объект будет дочерним по отношению к выделенному узлу.

updateNodeObject (TreeNode)
Метод обновления узла в дереве. После обновления записи (объекта) необходимо обновить соответствующий узел в дереве, если обновление касается текста представления записи.

deleteNodeObject (TreeNode)
Метод удаления записи из дерева. Удаляются также все дочерние записи. Чтобы не допустить удаление узловой записи дерева, необходимо проверить наличие дочерних записей. Для этого используйте метод getChildCount() класса TreeNode.

loadData (List<TreeRecord>)
Метод загрузки в дерево набора записей. Если в дереве имеются записи, то они будут удалены.

setLeafIcon (ImageIcon)
Метод представления изображения в отдельной записи (leaf), не имеющей дочерних. По умолчанию дерево использует свое изображение. Данный метод позволяет переопределить изображение по умолчанию.

setClosedIcon, setOpenIcon
Методы представления изображений (свернутое, развернутое) в узловых записях, имеющие дочерние. По умолчанию дерево использует свои изображения. Данные методы позволяют переопределить изображения по умолчанию.

Листинг интерфейса ITreeListener

Интерфейс ITreeListener включает единственный метод onClickNode, который должен быть переопределен в родительском классе, реализующим данный интерфейс. Данный метод вызывается каждый раз при выделении какой-либо записи в дереве. Таким образом, родительский класс получает информацию о выделенном в дереве объекте, которую может соответствующим образом сразу же обработать.

public interface ITreeListener 
{
    public void onClickNode (final TreeRecord node);
}

Класс TreeRecord

Базовый класс TreeRecord включает 3 поля (идентификатор записи id, идентификатор родительской записи pid и наименование записи name) и методы Get/Set для управления их значениями. Для представления в интерфейсе дерева Tree наименования записи используется метод toString :

public class TreeRecord {
    protected  int     id;
    protected  int     pid;
    protected  String  name;

    public TreeRecord(){}

    public TreeRecord(final int id, int pid, String name) {
        this.id   =   id;
        this.pid  =  pid;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }
}

Примечание : в методе toString можно определить собственное текстовое представление записи в дереве.

Базовый класс записи TreeRecord может быть расширен включением дополнительных полей и методов для отображения в интерфейсе дерева, как это представлено в примере.

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

Использование модуля base-gui для иерархического представления набора записей в дереве Tree в обычном java-приложении рассмотрено на странице описания примера дерева. В примере демонстрируются методы добавления/удаления записей и определения собственного изображения записей-листьев.

  Рейтинг@Mail.ru