2014-01-08 12 views
0
public JTable(Object rowData[][], Object columnNames[]) 
Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3"}, 
         { "Row2-Column1", "Row2-Column2", "Row2-Column3"} }; 
Object columnNames[] = { "Column One", "Column Two", "Column Three"}; 
JTable table = new JTable(rowData, columnNames); 

我在想,如果我们可以使用链表来代替。JTable构造函数可以接受除数组之外的其他数据结构吗?

+1

Hav你看过[javadoc](http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html)? –

+4

这个问题似乎无关紧要,因为它涉及到通过参考[API文档](http://docs.oracle.com/javase/7/docs/api/)得到更好回答的问题。 –

+1

这是一个合法的有效问题。 'DefaultTableModel'只接受一个数组和过时的&弃用的'Vector'。海报有一个List,并且想要制作一个表格。 JavaDocs未必明确如何实现这一点。 –

回答

2

这里是一个List<List<String>>使用了Object[][]代替的例子。我用了一个方法来创建一个DefaultTableModel并设置模式,以JTable

public DefaultTableModel createModel(List<List<String>> list, String[] columnNames) { 

    DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
    for (List<String> row : list) { 
     model.addRow(row.toArray()); 
    } 

    return model; 
} 

DefaultTableModel的javadoc

也看到this answer,我使用了Stack


完整的运行程序:

import java.awt.BorderLayout; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class TestTable { 

    private String[] colNames = { "Col 1", "Col2", "Col3", "Col4", "Col5" }; 

    private DefaultTableModel model; 
    private JTable table; 
    private MyStack myStack = new MyStack(); 
    private List<List<String>> list; 


    public TestTable() { 
     list = myStack.getList(); 

     model = createModel(list, colNames); 
     table = new JTable(model); 


     JFrame frame = new JFrame(); 
     frame.add(new JScrollPane(table), BorderLayout.CENTER); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public DefaultTableModel createModel(List<List<String>> list, String[] columnNames) { 

     DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
     for (List<String> row : list) { 
      model.addRow(row.toArray()); 
     } 

     return model; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new TestTable(); 
      } 
     }); 
    } 
} 

class MyStack { 
    public List<List<String>> list = new ArrayList<List<String>>(); 

    public MyStack() { 
     int k = 1; 
     for (int i = 0; i < 20; i++) { 
      List<String> innerList= new ArrayList<String>(); 
      for (int j = 0; j < 5; j++) { 
       innerList.add(String.valueOf(i * k * (j + 1))); 
      } 
      k++; 
      list.add(innerList); 
     } 
    } 

    public List<List<String>> getList() { 
     return list; 
    } 
} 
相关问题