为什么我无法使用Table列设置JTable

时间:2013-10-16 18:18:23

标签: java swing jtable tablemodel columnheader

我使用我的JTable,我的JTableModel用于我的项目。我无法使用列标题和空数据启动表。你能救我吗?谢谢。 这是我的代码

MainCode类

  public class MainCode extends JFrame{
       public MainCode(){
  ...........other codes here........
  MyTableModel tm= new MyTableModel();
  MyTable table=new MyTable(tm);
  //JTable table=new JTable(tm); if I write this line,I see column names.
  table.setPreferredScrollableViewportSize(new Dimension(480,80));
  table.setFillsViewportHeight(true);
  JScrollPane scrollPanetable=new JScrollPane(table);
  frame.getContentPane().add(scrollPanetable)
  ........another codes...........  

 }
}

MyTable类

public class MyTable extends JTable{
public MyTable(){

}
public MyTable(int row,int col){
    super(row,col);
}
@Override
public void tableChanged(TableModelEvent e){
    super.tableChanged(e);
    repaint();
    System.out.println("public void tableChanged(TableModelEvent e)");
}

}

MyTableModel类

public class MyTableModel extends AbstractTableModel{
   private String[] columnNames; 
   private Object[][] data;
public MyTableModel(){
    super();
    columnNames=new String[]{"A","B","C"};
    data=new Object[][]{ {null,null,null}};
}
public int getColumnCount() {
    return columnNames.length;
}

public int getRowCount() {
    return data.length;
}

public String getColumnName(int col) {
    return columnNames[col];
}

public Object getValueAt(int row, int col) {
    return data[row][col];
}
 }

它不是以列名开头的。这段代码有什么问题。我看到下图。 enter image description here

3 个答案:

答案 0 :(得分:2)

因为MyTable中的构造函数没有参数MyTableModel

您正在创建这样的表:

MyTable table=new MyTable(tm);

所以你必须在MyTable中有这样的构造函数:

class MyTable extends JTable {

   public MyTable(MyTableModel tm){
        super(tm);
    }
}

如果您在此处发布了MyTable代码,则代码将无法编译!

答案 1 :(得分:1)

您很可能没有在JTable中添加JScrollPane,这会导致隐藏列名称

add(new JScrollPane(table));

答案 2 :(得分:1)

为什么要覆盖JTable?

您自己的评论if I write this line,I see column names表明您的覆盖JTable是问题所在。你有一个被覆盖的tableChanged(...)实现,文档说Application code will not use these explicitly, they are used internally by JTable.否则,你的子类JTable没有做任何特殊的事情来保证子类化。

如果你必须是子类,你必须告诉子类如何使用你没有做过的模型(通过构造函数或setModel(...))。