Пример реализации раскрывающихся списков, наподобие проводника Windows(Использование класса JTree)
Приведу два примера созданных с помощью двух инструментов разработки JBuilder 5 и JСreator при помощи имеющихся стандартных заготовок application.
В JBuilder 5
Создаются два файла: класс содержащий метод main - Application1 и класс FrameTree
Application1
package sampletree;
import javax.swing.UIManager;
import java.awt.*;
public class Application1
{
boolean packFrame = false;
public Application1()
{
FrameTree frame = new FrameTree();
if (packFrame)
{
frame.pack();
}
else
{
frame.validate();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
}
new Application1();
}
}
FrameTree
package sampletree;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class FrameTree extends JFrame
{
DefaultMutableTreeNode level0 = new DefaultMutableTreeNode("Корень дерева");
JTree jt = new JTree(level0);
public FrameTree()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{
init();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void init() throws Exception
{
this.setSize(new Dimension(400, 300));
this.setTitle("Tree Sample");
DefaultMutableTreeNode level1a;
DefaultMutableTreeNode level1b;
DefaultMutableTreeNode level1c;
level1a = new DefaultMutableTreeNode("Первая ветвь");
DefaultMutableTreeNode level1a_1=new DefaultMutableTreeNode("Ветвь первой ветви");
level1a_1.add(new DefaultMutableTreeNode("Отросточек"));
level1a.add(level1a_1);
level1a.add(new DefaultMutableTreeNode("Отросточек"));
level0.add(level1a);
level1b = new DefaultMutableTreeNode("Вторая ветвь");
DefaultMutableTreeNode level1b_1=new DefaultMutableTreeNode("Первая ветвь второй ветви");
level1b_1.add(new DefaultMutableTreeNode("Первый отросточек"));
level1b_1.add(new DefaultMutableTreeNode("Второй отросточек"));
level1b.add(level1b_1);
DefaultMutableTreeNode level1b_2=new DefaultMutableTreeNode("Вторая ветвь второй ветви");
level1b_2.add(new DefaultMutableTreeNode("Отросточек"));
level1b.add(level1b_2);
level0.add(level1b);
level1c = new DefaultMutableTreeNode("Отросточек");
level0.add(level1c);
this.getContentPane().add(jt);
}
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
}
}
В JСreator
Всё делается в одном файле:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
class TreeSample extends JFrame
{
DefaultMutableTreeNode level0 = new DefaultMutableTreeNode("Корень дерева");
JTree jt = new JTree(level0);
public TreeSample()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
init();
}
public static void main(String args[])
{
System.out.println("Starting TreeApplic...");
TreeSample mainFrame = new TreeSample();
mainFrame.setSize(400, 300);
mainFrame.setTitle("Tree sample");
mainFrame.setVisible(true);
}
public void init()
{
this.setSize(new Dimension(400, 300));
this.setTitle("Tree Sample");
DefaultMutableTreeNode level1a;
DefaultMutableTreeNode level1b;
DefaultMutableTreeNode level1c;
level1a = new DefaultMutableTreeNode("Первая ветвь");
DefaultMutableTreeNode level1a_1=new DefaultMutableTreeNode("Ветвь первой ветви");
level1a_1.add(new DefaultMutableTreeNode("Отросточек"));
level1a.add(level1a_1);
level1a.add(new DefaultMutableTreeNode("Отросточек"));
level0.add(level1a);
level1b = new DefaultMutableTreeNode("Вторая ветвь");
DefaultMutableTreeNode level1b_1=new DefaultMutableTreeNode("Первая ветвь второй ветви");
level1b_1.add(new DefaultMutableTreeNode("Первый отросточек"));
level1b_1.add(new DefaultMutableTreeNode("Второй отросточек"));
level1b.add(level1b_1);
DefaultMutableTreeNode level1b_2=new DefaultMutableTreeNode("Вторая ветвь второй ветви");
level1b_2.add(new DefaultMutableTreeNode("Отросточек"));
level1b.add(level1b_2);
level0.add(level1b);
level1c = new DefaultMutableTreeNode("Отросточек");
level0.add(level1c);
this.getContentPane().add(jt);
}
}
Рассматривать полностью весь пример, мы не будем, а рассмотрим саму реализацию иерархической системы данных в виде дерева.
Первые две строчки
DefaultMutableTreeNode level0 = new DefaultMutableTreeNode("Корень дерева");
JTree jt = new JTree(level0);
DefaultMutableTreeNode - узел общего назначения в структуре данных дерева.
JTree - дерево отображающие иерархическую систему данных.
Этими манипуляциями мы создаём дерево с одной ветвью(узлом).
Далее создаём ещё дополнительно три узла для одновременной манипуляции над ними.
DefaultMutableTreeNode level1a; DefaultMutableTreeNode level1b; DefaultMutableTreeNode level1c;
Создаём первый узел(первую ветвь).
level1a = new DefaultMutableTreeNode("Первая ветвь");
Создаём под узел.
DefaultMutableTreeNode level1a_1=new DefaultMutableTreeNode("Ветвь первой ветви");
Создаём в под узеле конечный узел.
level1a_1.add(new DefaultMutableTreeNode("Отросточек"));
Добавляем под узел в первый узел.
level1a.add(level1a_1);
Создаём в первом узле ещё и конечный узел.
level1a.add(new DefaultMutableTreeNode("Отросточек"));
Добавляем весь первый узел в корневой узел.
level0.add(level1a);
Проделываем похожие действия со вторым узлом, где в отличии от первого, вместо конечного узла добавляется узел содержаший в себе конечный узел.
level1b = new DefaultMutableTreeNode("Вторая ветвь");
DefaultMutableTreeNode level1b_1=new DefaultMutableTreeNode("Первая ветвь второй ветви");
level1b_1.add(new DefaultMutableTreeNode("Первый отросточек"));
level1b_1.add(new DefaultMutableTreeNode("Второй отросточек"));
level1b.add(level1b_1);
DefaultMutableTreeNode level1b_2=new DefaultMutableTreeNode("Вторая ветвь второй ветви");
level1b_2.add(new DefaultMutableTreeNode("Отросточек"));
level1b.add(level1b_2);
level0.add(level1b);
Потом также добавляем конечный узел в корневой узел.
level1c = new DefaultMutableTreeNode("Отросточек");
level0.add(level1c);
И теперь всё полученное дерево приспосабливаем на форму.
this.getContentPane().add(jt);
JAR-архивы:
SampleTree.jar
TreeSample.jar
java-файлы:
Application1.java
FrameTree.java
TreeSample.java



Узнай о чем ты на самом деле сейчас думаешь