0

私は自分の 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];
}
 }

列名で開始されていません。このコードの何が問題なのですか。下の画像が表示されます。 ここに画像の説明を入力

4

3 に答える 3

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. ます。

サブクラス化する必要がある場合は、モデルの使用方法をサブクラスに伝える必要がありますが、これは (コンストラクターまたは を介し​​てsetModel(...)) まだ行っていません。

于 2013-10-16T18:29:45.113 に答える
1

おそらく、列名が非表示になる原因となる を追加JTableしていない可能性がありますJScrollPane

add(new JScrollPane(table));
于 2013-10-16T18:24:39.747 に答える