首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称列中的AbstractTableModel帮助

名称列中的AbstractTableModel帮助
EN

Stack Overflow用户
提问于 2014-11-12 15:18:49
回答 1查看 192关注 0票数 1

我有一个AbstractTableModel子类和一个JFrame来显示表中的数据,运行,唯一出现的错误(而不是列名)出现在A、B、C

我做错了什么?

这是我的课

代码语言:javascript
复制
    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];
    }

};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 15:31:26

这种方法有一个错误:

代码语言:javascript
复制
    public String getColomnName(int numCol) {
        return colunas[numCol];
    }

应该是(注意u而不是o):

代码语言:javascript
复制
    @Override
    public String getColumnName(int numCol) {
        return colunas[numCol];
    }

这就是为什么@Override注释在子类和重写方法时非常重要的原因。如果将此注释包含在实际代码中,则不应该编译,因为getColomnName(...)不是在父类中定义的。

同样的原则适用于所有这些方法:

  • getColumnCount()
  • getRowCount()
  • getValueAt(int row, int column)

编辑

根据您的更新,您的表模型看起来很好。我使用您的表模型制作了一个MCVE,所有这些都如预期的那样工作。看看问题的第三次修订,您不使用TabelaAlunos表模型,而是使用TabelaLivros,所以问题可能在表模型中。

您还可以考虑使用POJO包装您的数据,以对业务数据进行建模,并实现一个表模型,如示例这里。还有一些高级的替代方案,如这里这里。也见罗布卡米克的来自数据库的表

最后,请参见下面的示例:

代码语言:javascript
复制
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];
        }
    }
}

屏幕截图

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26890337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档