gpt4 book ai didi

Java TableModel 实现导致程序崩溃

转载 作者:行者123 更新时间:2023-12-02 07:04:01 28 4
gpt4 key购买 nike

在我的程序中,我希望在 JTable 中显示一些数据。我有一个包含数据的类,因此在 JTable 中呈现它的最简单方法似乎是扩展我的类,以便它实现 TableModel 接口(interface)并将其用作模型JTable。不幸的是它对我来说不能正常工作。当程序即将绘制 JTable 时,javax.swing.JTable.prepareRenderer() 处会抛出 NullPointerException。为什么?

package bridgecalc;

import java.util.HashSet;

import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class MyTableModel extends MyDataClass implements TableModel {

private static final long serialVersionUID = 1L;
// private Object[][] data; //this is in fact declared in the superclass
private static final String[] colNames = {"bla", "blabla", "hola", "hej", "egle", "begle", "eciepecie"};
private HashSet<TableModelListener> listeners;

public MyTableModel() {
data = new Object[7][7];
listeners = new HashSet<TableModelListener>();
}

@Override
public int getColumnCount() {
return data.length;
}

@Override
public int getRowCount() {
return data[0].length;
}

@Override
public Object getValueAt(int arg0, int arg1) {
return data[arg0][arg1];
}

@Override
public void addTableModelListener(TableModelListener l) {
listeners.add(l);
}

@Override
public Class<?> getColumnClass(int columnIndex) {
return null;
}

@Override
public String getColumnName(int columnIndex) {
return colNames[columnIndex];
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (rowIndex == columnIndex)
return false;
else return true;
}

@Override
public void removeTableModelListener(TableModelListener l) {
listeners.remove(l);
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
data[columnIndex][rowIndex] = aValue;
}

}

程序中的某个地方:

...
JTable table = new JTable(new MyTableModel());
this.setViewportView(table);
...

预先感谢您的帮助。

最佳答案

也许您的问题是 getColumnClass() 返回 null 而不是 Object.class

使用 AbstractTableModel 作为您的基类。这样你就不需要那么多方法了。事实上,您刚刚开始处理所需的所有事件内容。如果您想这样做,请使用 Oracle/Sun 源或其他源从“AbstractTableModel”复制该代码。以下是某些版本的一些源代码,可以让您了解有多少代码可以处理事件:Java Source for AbstractTableModel

public class MyTableModel extends AbstractTableModle {

private MyDataClass myData; // holds the cell data

private static final String[] colNames = {"bla", "blabla", "hola", "hej", "egle", "begle", "eciepecie"};

public MyTableModel(MyDataClass val) {
myData = val;
myData.data = new Object[7][7];
}

@Override
public int getColumnCount() {
return myData.data.length;
}

@Override
public int getRowCount() {
return myData.data[0].length;
}

@Override
public Object getValueAt(int arg0, int arg1) {
return myData.data[arg0][arg1];
}

@Override
public String getColumnName(int columnIndex) {
return colNames[columnIndex];
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (rowIndex == columnIndex)
return false;
else return true;
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
myData.data[columnIndex][rowIndex] = aValue;
}

}

关于Java TableModel 实现导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310147/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com