如何从数组数据创建 JTree 结构?
How to create a JTree structure from array data?
我有这个table:
+---------------------+
| Name | Type | Month |
+---------------------+
| John | xyz | March |
+---------------------+
| Joe | xyz | March |
+---------------------+
| Nick | abc | March |
+---------------------+
| Phil | abc | March |
+---------------------+
我想以这种方式在 JTree 上显示它的记录:
March
| xyz
| | John
| | Joe
| abc
| Nick
| Phil
我该怎么做?
我找到了很多关于此的文档,但我仍然无法理解如何从长度未知的数组中执行此操作。
我问这个是因为使用 UCanAccess 我 select 所有记录,我将它们全部存储在一个数组中。
那么将这些节点添加到结构中的最有效方法是什么? (考虑到我要存储 300 多个元素)
循环数组并在类型或月份发生变化时添加树节点。这是一个非常简化的例子。它使用 class Test2.java 描述数组。确保您的数据以正确的排序方式出现:
public class Test2 {
private String month;
private String type;
private String name;
public Test2(String month, String type, String name) {
setMonth(month);
setType(type);
setName(name);
}
/**
* @return the month
*/
public String getMonth() {
return month;
}
/**
* @param month the month to set
*/
public void setMonth(String month) {
this.month = month;
}
/**
* @return the Type
*/
public String getType() {
return type;
}
/**
* @param Type the Type to set
*/
public void setType(String type) {
this.type = type;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
并且此 class 在 JFrame 中显示 JTree:
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class Test1 extends JFrame {
public Test1() {
super("Test");
ArrayList<Test2> list = new ArrayList();
list.add(new Test2("March", "xyz", "John"));
list.add(new Test2("March", "xyz", "Joe"));
list.add(new Test2("March", "abc", "Nick"));
list.add(new Test2("March", "abc", "Phil"));
Iterator iter = list.iterator();
String prevMonth = "";
String prevType = "";
DefaultMutableTreeNode top = new DefaultMutableTreeNode("List");
DefaultMutableTreeNode month = null;
DefaultMutableTreeNode type = null;
while (iter.hasNext()) {
Test2 t = (Test2) iter.next();
if (!t.getMonth().equals(prevMonth)) {
if (month != null) {
top.add(month);
}
month = new DefaultMutableTreeNode(t.getMonth());
prevMonth = t.getMonth();
}
if (!t.getType().equals(prevType)) {
if (type != null) {
month.add(type);
}
type = new DefaultMutableTreeNode(t.getType());
prevType = t.getType();
}
type.add(new DefaultMutableTreeNode(t.getName()));
}
month.add(type);
top.add(month);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(new JScrollPane(new JTree(top)));
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String a[]) {
Test1 t1 = new Test1();
}
}
我有这个table:
+---------------------+
| Name | Type | Month |
+---------------------+
| John | xyz | March |
+---------------------+
| Joe | xyz | March |
+---------------------+
| Nick | abc | March |
+---------------------+
| Phil | abc | March |
+---------------------+
我想以这种方式在 JTree 上显示它的记录:
March
| xyz
| | John
| | Joe
| abc
| Nick
| Phil
我该怎么做?
我找到了很多关于此的文档,但我仍然无法理解如何从长度未知的数组中执行此操作。
我问这个是因为使用 UCanAccess 我 select 所有记录,我将它们全部存储在一个数组中。
那么将这些节点添加到结构中的最有效方法是什么? (考虑到我要存储 300 多个元素)
循环数组并在类型或月份发生变化时添加树节点。这是一个非常简化的例子。它使用 class Test2.java 描述数组。确保您的数据以正确的排序方式出现:
public class Test2 {
private String month;
private String type;
private String name;
public Test2(String month, String type, String name) {
setMonth(month);
setType(type);
setName(name);
}
/**
* @return the month
*/
public String getMonth() {
return month;
}
/**
* @param month the month to set
*/
public void setMonth(String month) {
this.month = month;
}
/**
* @return the Type
*/
public String getType() {
return type;
}
/**
* @param Type the Type to set
*/
public void setType(String type) {
this.type = type;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
并且此 class 在 JFrame 中显示 JTree:
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class Test1 extends JFrame {
public Test1() {
super("Test");
ArrayList<Test2> list = new ArrayList();
list.add(new Test2("March", "xyz", "John"));
list.add(new Test2("March", "xyz", "Joe"));
list.add(new Test2("March", "abc", "Nick"));
list.add(new Test2("March", "abc", "Phil"));
Iterator iter = list.iterator();
String prevMonth = "";
String prevType = "";
DefaultMutableTreeNode top = new DefaultMutableTreeNode("List");
DefaultMutableTreeNode month = null;
DefaultMutableTreeNode type = null;
while (iter.hasNext()) {
Test2 t = (Test2) iter.next();
if (!t.getMonth().equals(prevMonth)) {
if (month != null) {
top.add(month);
}
month = new DefaultMutableTreeNode(t.getMonth());
prevMonth = t.getMonth();
}
if (!t.getType().equals(prevType)) {
if (type != null) {
month.add(type);
}
type = new DefaultMutableTreeNode(t.getType());
prevType = t.getType();
}
type.add(new DefaultMutableTreeNode(t.getName()));
}
month.add(type);
top.add(month);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(new JScrollPane(new JTree(top)));
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String a[]) {
Test1 t1 = new Test1();
}
}