AbstractTableModel名称列的帮助sql

时间:2014-11-12 15:18:49

标签: java swing tablemodel abstracttablemodel

我有一个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];
    }

};

1 个答案:

答案 0 :(得分:2)

此方法存在拼写错误:

    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,它都按预期工作。看看问题' third revision,您不能使用TabelaAlunos表格模型,而是使用TabelaLivros,因此问题可能出在该表格模型中。

您还可以考虑使用POJO包装数据来建模业务数据并实现表格模型,例如示例here。展示了herehere的高级替代品。另请参阅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