2008-09-19 63 views
1

之前,你回答:是的,我已經在Sun公司在讀JTable的教程。不,它沒有幫助我。是的,我是一個玩偶。 請不要回答該文件的參考文件。我特別感興趣的是如何通過Netbeans IDE向我的Jtable動態添加行和列。我已經有一個包含我的數據散列表的對象。我無法弄清楚我應該將該對象傳遞給哪個對象或什麼對象。謝謝你的時間!使用JTable中與NetBeans 6.1又名馬蒂斯

我有一個包含(長度l的)對象的系列(每一個對應於一個行)的載體。如何獲取該矢量對象以在JTable上顯示?

回答

2

一個JTable使用TableModel來保存數據。您的散列/數據向量需要適應才能使用;你可以寫一個TableModel實現,使用哈希/向量爲後盾的數據,或者,如果你不會動態更新哈希/向量和需要它自動顯示,你可以簡單地複製到一切的DefaultTableModel一個實例,並使用那。

如果使用適配器,並動態更新哈希/向量,請記住,所有的更新都必須在事件調度線程來完成。 :-)

+0

並確保您修改模型正確觸發模型更改事件的列/行,否則您將無法在表格中看到任何更新。 – 2008-09-20 00:23:55

0

要添加到我以前的答案,因爲它的價值,其實我已經寫了使用(主要)的表模型的ArrayList<Row>爲後盾的數據,其中是HashMap<String, Object>,映射列名的值。

整個事情是約1500行代碼,雖然我的代碼可能是矯枉過正你的目的,你可能沒有寫幾乎一樣多的代碼。祝一切順利!

1

只是爲了說明,以下是如何使用DefaultTableModel來顯示來自HashMap s和Vector s的數據的示例。

以下是將數據從HashMap轉儲到DefaultTableModel的示例,該數據用作JTableTableModel

import java.util.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class JTableExample extends JFrame 
{ 
    private void makeGUI() 
    { 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // HashMap with some data. 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put("key1", "value1"); 
     map.put("key2", "value2"); 

     // Create a DefaultTableModel, which will be used as the 
     // model for the JTable. 
     DefaultTableModel model = new DefaultTableModel(); 

     // Populate the model with data from HashMap. 
     model.setColumnIdentifiers(new String[] {"key", "value"}); 

     for (String key : map.keySet()) 
      model.addRow(new Object[] {key, map.get(key)}); 

     // Make a JTable, using the DefaultTableModel we just made 
     // as its model. 
     JTable table = new JTable(model); 

     this.getContentPane().add(table); 
     this.setSize(200,200); 
     this.setLocation(200,200); 
     this.validate(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new JTableExample().makeGUI(); 
    } 
} 

對於使用Vector以包括數據的一列到JTable

import java.util.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class JTableExample extends JFrame 
{ 
    private void makeGUI() 
    { 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Vector with data. 
     Vector<String> v = new Vector<String>(); 
     v.add("first"); 
     v.add("second"); 

     // Create a DefaultTableModel, which will be used as the 
     // model for the JTable. 
     DefaultTableModel model = new DefaultTableModel(); 

     // Add a column of data from Vector into the model. 
     model.addColumn("data", v); 

     // Make a JTable, using the DefaultTableModel we just made 
     // as its model. 
     JTable table = new JTable(model); 

     this.getContentPane().add(table); 
     this.setSize(200,200); 
     this.setLocation(200,200); 
     this.validate(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new JTableExample().makeGUI(); 
    } 
} 

我不得不承認的列名不使用上述實施例中,當出現(我通常使用的DefaultTableModelsetDataVector方法),所以如果任何人有任何建議如何使列名出現,請做:)

0

只是一個除了coobird的職位;獲得頭出現,我這樣做:

import java.util.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class JTableExample extends JFrame 
{ 
    private void makeGUI() 
    { 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // HashMap with some data. 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put("key1", "value1"); 
     map.put("key2", "value2"); 

     // Create a DefaultTableModel, which will be used as the 
     // model for the JTable. 
     DefaultTableModel model = new DefaultTableModel(); 

     // Populate the model with data from HashMap. 
     model.setColumnIdentifiers(new String[] {"key", "value"}); 

     for (String key : map.keySet()) 
       model.addRow(new Object[] {key, map.get(key)}); 

     // Make a JTable, using the DefaultTableModel we just made 
     // as its model. 
     JTable table = new JTable(model); 

     this.getContentPane().add(new JScrollPane(table)); 
     this.setSize(200,200); 
     this.setLocation(200,200); 
     this.validate(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new JTableExample().makeGUI(); 
    } 
} 

順便說一句,您的文章是對我非常有幫助coobird,你不知道我的感激之情!