AbstractTableModel Справка по имени столбца sql

У меня есть подкласс 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];
    }

};

person Fernando Tricks Combo    schedule 12.11.2014    source источник


Ответы (1)


В этом методе опечатка:

    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 protected]", "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];
        }
    }
}

Снимок экрана

Пример

person dic19    schedule 12.11.2014
comment
Уже сделал это, но всегда появляется в A, B, C, D в столбцах имени - person Fernando Tricks Combo; 12.11.2014
comment
Этот результат предполагает, что вызывается реализация getColumnName(int columnIndex) по умолчанию, унаследованная от AbstractTableModel, а не ваша. Итак, я думаю, у вас все еще есть проблемы с правильным переопределением этого метода, чтобы вернуть соответствующее имя столбца. Пожалуйста, отредактируйте свой вопрос с обновленным кодом модели таблицы. @FernandoTricksCombo - person dic19; 13.11.2014
comment
как это? но название осталось прежним - person Fernando Tricks Combo; 16.11.2014
comment
Пожалуйста, смотрите мое редактирование. Надеюсь, теперь у вас получится, @FernandoTricksCombo - person dic19; 17.11.2014
comment
Добро пожаловать. Если ответ помог вам решить проблему, не забудьте отметить его как принятый. @FernandoTricksCombo - person dic19; 20.11.2014