2017-01-27 10 views
-1

У меня есть эта таблица:Как создать структуру JTree из данных массива?

+---------------------+ 
| Name | Type | Month | 
+---------------------+ 
| John | xyz | March | 
+---------------------+ 
| Joe | xyz | March | 
+---------------------+ 
| Nick | abc | March | 
+---------------------+ 
| Phil | abc | March | 
+---------------------+ 

Я хотел бы показать свои записи на JTree таким образом:

March 
| xyz 
| | John 
| | Joe 
| abc 
    | Nick 
    | Phil 

Как я могу сделать это?

Я нашел много документации об этом, но до сих пор не могу понять, как это сделать из массива с неизвестной длиной.

Я спрашиваю об этом, потому что с помощью UCanAccess я выбираю все записи, и я храню их все в массиве.

Итак, что может быть самым эффективным способом добавления этих узлов в структуру? (учитывая, что у меня есть более 300 элементов для хранения)

+0

UCanAccess обеспечивает интерфейс JDBC. Он не хранит записи в массиве! – jamadei

+0

@jamadei отредактирован! Итак, вы знаете ответ? – valbuxvb

+0

* «Я до сих пор не могу понять, как это сделать из массива с неизвестной длиной» * - Вы знаете, что вы можете [итерации через элементы в массиве] (http://stackoverflow.com/q/2331509/2144390) , правильно? –

ответ

1

Зациклируйте массив и добавьте узел дерева, если изменяется тип или месяц. Это очень упрощенный пример. Он использует класс 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; 
} 

} 

И этот класс отображает JTree в JFrame:

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(); 
} 
}