下面是我将表格模型添加到表格中的代码:
table = new JTable(new TerminiTableModel());
scrollPane = new JScrollPane(table);然后我创建了这个类TerminiTableModel(),下面是一个简单的生成代码,我想在其中获取列数和行数……Column count工作得很好,在我的表中添加了3列("Termini","Ime I prezime“和"Napomena")。当我在getRowCount中添加这行代码时,我得到了错误,甚至无法编译它……这是代码。我对此进行了搜索,但就是想不出来……:-/
public class TerminiTableModel extends AbstractTableModel implements TableModel {
protected TableModel tableModel;
private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Class<?> getColumnClass(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.length; // <<----- this line is problem
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isCellEditable(int row, int col) {
if (col > 0) {
return true;
} else
return false;
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void setValueAt(Object data, int row, int col) {
// TODO Auto-generated method stub
}
}解决方案可能很简单,但我需要一些帮助...先谢谢你……
发布于 2013-04-11 21:03:02
基于通信网络进行编辑
JTable中的行是基于二维数组的,然后
private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };应该是
private String[][] data = {{"7:00", null, null}, {"8:00", null, null},
{"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null},
{"12:00", null, null}};对于已定义的列

来自代码
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class MyTable {
private JFrame frame = new JFrame("TableDemo");
private JScrollPane tableScroll = new JScrollPane();
private MyTableModel tableModel = new MyTableModel();
private JTable dialogTable = new JTable(tableModel);
public MyTable() {
dialogTable.setPreferredScrollableViewportSize(dialogTable.getPreferredSize());
tableScroll = new JScrollPane(dialogTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.add(tableScroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
System.out.println(dialogTable.getRowCount());
System.out.println(dialogTable.getColumnCount());
System.out.println(tableModel.getRowCount());
System.out.println(tableModel.getColumnCount());
}
private class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
private String[][] data = {{"7:00", null, null}, {"8:00", null, null},
{"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null},
{"12:00", null, null}};
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Class<?> getColumnClass(int columnNames) {
switch (columnNames) {
case 0:
return String.class;//return Date.class;
case 1:
return String.class;//return Double.class;
case 2:
return String.class;//return Boolean.class;
default:
return String.class;
}
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.length; // <<----- this line is problem
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isCellEditable(int row, int col) {
if (col > 0) {
return true;
} else {
return false;
}
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void setValueAt(Object data, int row, int col) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyTable myTable = new MyTable();
}
});
}
}发布于 2013-04-11 21:03:08
导致的错误如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException这是由于未指定列类造成的:
@Override
public Class<?> getColumnClass(int arg0) {
return String.class;
}此外,getValueAt不返回任何数据。您正在使用一维数组来存储数据,鉴于JTable数据是以行和列表示的,因此您需要使用二维数组。
https://stackoverflow.com/questions/15949269
复制相似问题