2015-04-12 39 views
1

由於某些原因,我的JTable不會顯示我的表模型中的標題。此外,我需要在滾動窗格中的表,並似乎刪除整個表。這是在Java Swing中。JTable在Swing中沒有標題

package table; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.UIManager; 
import javax.swing.table.DefaultTableModel; 

public class TableIcon extends JFrame{ 

    public TableIcon(){ 

    TableModel tableModel = new TableModel(); 
    JTable table = new JTable(tableModel); 

    JScrollPane spTable = new JScrollPane(); 
    spTable.add(table); 
    this.add(spTable); 
    this.add(table); 
    } 


    //spTable = new JScrollPane(); 
    //spTable.add(table); 

     public static void main(String[] args) 
     { 
      TableIcon frame = new TableIcon(); 
      frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      frame.pack(); 
      frame.setVisible(true); 
     } 


} 

package table; 

import javax.swing.table.AbstractTableModel; 

/*** Class that sets up a table model for a downloaded batch***/ 
@SuppressWarnings("serial") 
public class TableModel extends AbstractTableModel { 



    public TableModel() { 
     super(); 

    } 

    @Override 
    public int getRowCount() { 
     return 5; 
    } 

    @Override 
    public int getColumnCount() { 
     return 2; 
    } 

    @Override 
    public String getColumnName(int column) { 

     if (column == 0) { 
      return "Record Number"; 
     } else { 
      return "happy"; 
     } 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 

     if (columnIndex == 0) 
      return rowIndex + 1; 
     else 
      return 3; 
    } 

    @Override 
    public void setValueAt(Object value, int rowIndex, int columnIndex) { 

    } 


    @Override 
    public boolean isCellEditable(int rowIndex, int columnIndex) { 

     if (columnIndex == 0) 
      return false; 
     else 
      return true; 
    } 

} 
+0

你不應該直接添加組件到JFrame。改爲使用'JFrame.getContentPane()。add()'。 – John

+1

@John來自'JFrame'文檔:*作爲一個慣例'add'及其變體,'remove'和'setLayout'已被覆蓋,以便根據需要轉發到'contentPane'。這意味着你可以編寫:'frame.add(child);'這個孩子將被添加到'contentPane'。* – kiheru

+0

@kiheru感謝您的更正! – John

回答

4

您不應該將組件添加到滾動窗格。相反,你設置視圖。這可以通過構造函數的參數來實現最簡單的:

JScrollPane spTable = new JScrollPane(table); 
this.add(spTable); 

此外,刪除該行,該表已在滾動窗格:

this.add(table); 

此外,它只是爲了更好地使用JFrame,而不是擴展一個。最後,您應該在event dispatch thread中創建GUI。

2

你應該使用,需要一個JTable這樣的構造函數創建JScrollPane

JScrollPane spTable = new JScrollPane(table); 
this.add(spTable); 

有沒有需要調用spTable.add(table);this.add(table);因爲spTable已經包含table