2011-03-25 42 views
2

表我有一個main.java,有一個按鈕,當你按下它,它調用的方法和retuns節點的ArrayList; 我想在表中顯示該ArrayList(5個字段作爲類節點描述) 如何做到這一點,但問題是,他們是列表類型顯示一些領域?顯示的ArrayList的

Node.java 

public class Node { 
    private String name; 
    private double value; 
    private List<Node> first; 
    private List<Node> second; 
    private List<Double> values; 

     //some methods... 
} 

main.java

import java.awt.Button; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
public class Main { 
    public static void main(String[] args) { 
      JFrame frame = new JFrame("Red Bayesiana Visita a Asia "); 
      JPanel panel = new JPanel(); 
      boton = new Button("Get"); 
      panel.add(boton); 
      frame.add(panel); 

      ArrayList<Node> arrayList; 

      boton.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         arrayList = method("file.txt"); 
         //insert into table arrayList of 5 fields? 
        } 
      }); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
} 
+1

你想要什麼來實現呢?我可以看到二叉樹的列表,你希望它們顯示在['JTable'(http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html)?也許['JTree'(http://download.oracle.com/javase/6/docs/api/javax/swing/JTree.html)是一個更好的選擇? – 2011-03-25 22:05:53

+0

以及代碼的外觀如何? – cMinor 2011-03-25 22:18:56

回答

4

Creating a Table Model討論的,讓Nodes延伸AbstractTableModel並實現所需的方法。使用生成的模型創建您的JTable

附錄:這裏的模型的輪廓。字段namevalue可以使用默認的renderer,但是您將決定如何在每個Node中找到renderList

import java.util.ArrayList; 
import java.util.List; 
import javax.swing.table.AbstractTableModel; 

/** @see http://stackoverflow.com/questions/5438516 */ 
public class Nodes extends AbstractTableModel { 

    private List<Node> nodes = new ArrayList<Node>(); 

    @Override 
    public int getRowCount() { 
     return nodes.size(); 
    } 

    @Override 
    public int getColumnCount() { 
     return 5; // A Node has five members 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 
     Node node = nodes.get(row); 
     switch (col) { 
      case 0: 
       return node.name; 
      case 1: 
       return node.value; 
      case 2: 
       return node.first; 
      case 3: 
       return node.second; 
      case 4: 
       return node.values; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public Class getColumnClass(int c) { 
     return getValueAt(0, c).getClass(); 
    } 

    private class Node { 

     private String name; 
     private double value; 
     private List<Node> first; 
     private List<Node> second; 
     private List<Double> values; 
    } 
}