gpt4 book ai didi

java - AbstractTableModel 名称 列 sql 中的帮助

转载 作者:行者123 更新时间:2023-11-30 03:40:35 24 4
gpt4 key购买 nike

我有一个 AbstractTableModel 的子类和一个 JFrame 来显示我表中的数据,跑过去,出现的唯一错误而不是列名出现 A,乙、丙

我做错了什么?

这是我的类(class)

    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];
}

};

最佳答案

此方法有一个拼写错误:

    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 行,int 列)
<小时/>

编辑

根据您的更新,您的表格模型看起来很好。我使用您的表模型制作了 MCVE ,一切都按预期工作。查看问题的 third revision ,您没有使用 TabelaAlunos 表模型,而是使用 TabelaLivros ,因此问题可能出在该表模型中。

您还可以考虑使用 POJO 包装数据来建模业务数据并实现表模型,如示例 hereherehere 显示了高级替代方案。另请参阅 Rob Camick 的 Table From Database

最后请看下面的例子:

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];
}
}
}

屏幕截图

Example

关于java - AbstractTableModel 名称 列 sql 中的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890337/

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