2013-05-25 74 views
0

最近兩天我一直試圖在java應用程序中用JTable創建一個數據查看錶。JTable標頭沒有設置

Netbeans綁定選項不起作用,但從不知道,我設法創建了我自己的TableModel

數據顯示在表中,但標題始終只包含字母(A,B,C ...表示每列)。在某一點上,一切運行良好,但我想爲該特定表格設置另一個模型,即使創建全新的JPanel並從頭開始設置,它也不會正確顯示標籤。

這是我的自定義的TableModel類

public class MyTableModel extends AbstractTableModel{  

private ArrayList<Options> list; 
String[] headers; 

public MyTableModel(ArrayList<Options> list, String[] headers) { 
    this.list = list; 
    this.headers = headers; 
} 


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

@Override 
public int getColumnCount() { 
    return headers.length; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    if(columnIndex == 0) { 
     return list.get(rowIndex).getId(); 
    } 
    if(columnIndex == 1) { 
     return list.get(rowIndex).getText(); 
    } 
    else { 
     return null; 
    } 
} } 

而且這是在JFrame類的代碼(我運行一個)

ArrayList<Options> list; 
String[] optionHeaders = {"id", "text"}; 

public table2frame() { 

    initComponents(); 
    list = (ArrayList) zadanie_2_app.Zadanie_2_app.findAll(); 
    JTable table2 = new JTable(new MyTableModel(list, optionHeaders));} 
+0

您還沒有設置欄。 – Makky

回答

2

AbstractTableModel要求重寫getColumnName,否則將使用佔位符列名稱。添加

@Override 
public String getColumnName(int column) { 
    return headers[column]; 
} 
+0

是的,這工作,但我仍然想知道爲什麼它沒有它之前的工作 – yossarian

+0

不可能說沒有看到以前的代碼。覆蓋'getColumnName'作爲_ [創建表模型](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data)中的指導原則 – Reimeus

1

我想設置特定的另一種模式的一部分表,並且即使創建全新的JPanel並從頭開始設置,它也不會正確顯示標籤。

AFAIK從這個desription明白​​,JTable的是容器的JTable

  • 把JTable來JScrollPane中,JTable中應該放到JScrollPane的,否則JTableHeader上是不可見的自動

  • JTableHeader的GET從JTable中,將LayoutManager for JPanel更改爲BorderLayout,將JTable更改爲CENTER區域,JTableHeader更改爲NOTHR區域