我有一个AbstractTableModel子类和一个JFrame来显示表中的数据,运行,唯一出现的错误(而不是列名)出现在A、B、C
我做错了什么?
这是我的课
package Biblioteca;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class TabelaAlunos extends AbstractTableModel {
private ArrayList linhas = null;
private String[] colunas = {"id_aluno", "nome_aluno", "matricula", "telefone", "email", "sexo"};
public TabelaAlunos(ArrayList lin, String[] col) {
setColunas(col);
setLinhas(lin);
}
public ArrayList getLinhas() {
return linhas;
}
public void setLinhas(ArrayList dados) {
linhas = dados;
}
public String[] getColunas() {
return colunas;
}
public void setColunas(String[] nomes) {
colunas = nomes;
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public String getColumnName(int columnIndex) {
return colunas[columnIndex];
}
@Override
public Object getValueAt(int numLin, int columnIndex) {
Object[] linha = (Object[]) getLinhas().get(numLin);
return linha[columnIndex];
}
};发布于 2014-11-12 15:31:26
这种方法有一个错误:
public String getColomnName(int numCol) {
return colunas[numCol];
}应该是(注意u而不是o):
@Override
public String getColumnName(int numCol) {
return colunas[numCol];
}这就是为什么@Override注释在子类和重写方法时非常重要的原因。如果将此注释包含在实际代码中,则不应该编译,因为getColomnName(...)不是在父类中定义的。
同样的原则适用于所有这些方法:
getColumnCount()getRowCount()getValueAt(int row, int column)编辑
根据您的更新,您的表模型看起来很好。我使用您的表模型制作了一个MCVE,所有这些都如预期的那样工作。看看问题的第三次修订,您不使用TabelaAlunos表模型,而是使用TabelaLivros,所以问题可能在表模型中。
您还可以考虑使用POJO包装您的数据,以对业务数据进行建模,并实现一个表模型,如示例这里。还有一些高级的替代方案,如这里和这里。也见罗布卡米克的来自数据库的表。
最后,请参见下面的示例:
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class Demo {
private void createAndShowGUI() {
String[] header = {"id_aluno", "nome_aluno", "matricula", "telefone", "email", "sexo"};
ArrayList<Object[]> data = new ArrayList<>();
data.add(new Object[] {1, "Fernando", "1234567890", "1234-567890", "email@example.com", "M"});
TableModel model = new TabelaAlunos(data, header);
JTable table = new JTable(model);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
public class TabelaAlunos extends AbstractTableModel {
private ArrayList linhas;
private String[] colunas;
public TabelaAlunos(ArrayList lin, String[] col) {
setColunas(col);
setLinhas(lin);
}
public ArrayList getLinhas() {
return linhas;
}
public void setLinhas(ArrayList dados) {
linhas = dados;
}
public String[] getColunas() {
return colunas;
}
public void setColunas(String[] nomes) {
colunas = nomes;
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public String getColumnName(int columnIndex) {
return colunas[columnIndex];
}
@Override
public Object getValueAt(int numLin, int columnIndex) {
Object[] linha = (Object[]) getLinhas().get(numLin);
return linha[columnIndex];
}
}
}屏幕截图

https://stackoverflow.com/questions/26890337
复制相似问题