Почему я не могу настроить JTable со столбцами таблицы
Я использую мой 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];
}
}
он не начинается с имен столбцов. Что не так с этим кодом. Я вижу изображение ниже.
3 ответа
Потому что у вас нет конструктора в MyTable
который принимает параметр MyTableModel
,
Вы создаете таблицу следующим образом:
MyTable table=new MyTable(tm);
Таким образом, вы должны иметь конструктор в MyTable, как это:
class MyTable extends JTable {
public MyTable(MyTableModel tm){
super(tm);
}
}
Если у вас есть MyTable
код, который вы разместили здесь, ваш код не будет компилироваться!
Скорее всего, вы не добавили JTable
в JScrollPane
что приведет к тому, что имена столбцов будут скрыты
add(new JScrollPane(table));
Почему вы переопределяете 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(...)
).