2011-07-11 74 views
3

我是使用Java GUI的新手,我試圖用我的soccerteam的一些得分結果創建一個表。JTable列標題不顯示,而是他們'A','B',

起初我使用的是DefaultTableModel,我沒有任何問題,我的列名。他們通過使用JScrollpane顯示出來很好。然後我想嘗試實現我自己的TableModel,從那以後我再也看不到我的表格列標題了。當我仍在使用ScrollPane時,它們顯示爲'A','B',...,'G'。 我需要這個TableModel因爲我打算使用完全相同的結構來添加一些其他的東西。

任何人都可以幫助我,請嘗試解決這個問題。

感謝

class MyTableModel extends AbstractTableModel{ 
    private String[] titles; 
    private Object[][] data; 

    public MyTableModel(String [] t, Object [][] d){ 
     this.titles = t; 
     this.data = d; 
    } 
    public Object getValueAt(int row, int col){ 
     return data[row][col]; 
    } 
    public int getColumnCount(){ 
     return titles.length; 
    } 
    public int getRowCount(){ 
     return data.length; 
    } 
} 

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

public JPanel createContentPane(){ 
    mainPanel = new JPanel(); 
    mainPanel.setLayout(new BorderLayout(10, 10)); 

    String [] titles = {"Naam", "Doelpunten", "% Doelpunten", "Assists", "% Assists", "", "% Totaal"}; 
    Object [][] data = new Object[spelers.size()][titles.length]; 
    int counter = 0; 
    spelers = getSpelersFromDB("all"); 
    for (Iterator<Speler> iter = spelers.iterator(); iter.hasNext();){ 
     Speler temp = iter.next(); 
     data[counter][0] = temp.naam; 
     data[counter][1] = temp.doelpunten; 
     data[counter][2] = String.format("%3.1f %%", berekenPercentageDoelpunten(temp)); 
     data[counter][3] = temp.assists; 
     data[counter][4] = String.format("%3.1f %%", berekenPercentageAssists(temp)); 
     data[counter][5] = ""; 
     data[counter][6] = String.format("%3.1f %%", berekenTotaalPercentage(temp)); 
     counter += 1; 
    } 

    JTable table = new JTable(new MyTableModel(titles, data)); 

    JScrollPane scrollPane = new JScrollPane(table); 
    scrollPane.setPreferredSize(new Dimension(500, 500)); 
    mainPanel.add(scrollPane, BorderLayout.CENTER); 
    mainPanel.setOpaque(true); 
    return mainPanel; 
} 

private static void createAndShowGUI(){ 
    frame.setMinimumSize(new Dimension(700, 300)); 
    frame.setPreferredSize(new Dimension(700, 500)); 
    frame.setMaximumSize(new Dimension(800, 800)); 

    Voetbal demo = new Voetbal(); 
    frame.setContentPane(demo.createContentPane()); 
    frame.setJMenuBar(demo.createJMenuBar()); 
    frame.setVisible(true); 
    frame.pack(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
+0

對於已開始調查此問題的人員,我很抱歉,但我自己發現了這個問題。爲了顯示列名,我所要做的就是在我的MyTableModel類 –

+0

中實現getColumnName方法。不需要道歉,但也可以將Fido的答案標記爲「正確」。 –

回答

6

AbstractTableModel上總是返回 'A', 'B' ....等作爲列名(查看文檔),你需要做的是覆蓋getColumnName()所方法,類似於:

public String getColumnName(int column) { 
     return titles[column] 
    }