Имена столбцов JTable отображаются неправильно

Я хочу отобразить некоторые вещи в JTable.

Проблема в том, что имена столбцов JTable - "A", "B", "C",...

мой код такой:

import javax.swing.JTable;

public class View extends JFrame implements Observer {

    private JTable contentTable;

    public View() {
        ...

        String[][] s = {{"test","test","test", "test}};
        String[] columnNames = { "Name", "Category", "Start", "End" };
        this.contentTable = new JTable(new MyTableModel(columnNames, s));
        this.contentPanel.add(new JScrollPane(this.contentTable));

        ...
    }

}

А вот класс MyTableModel

import javax.swing.table.AbstractTableModel;

    public class MyTableModel extends AbstractTableModel {

        private String[] columnNames;
        private Object[][] data;

        public MyTableModel(String[] columns, Object[][] dat){
            this.columnNames = columns;
            this.data = dat;
        }

    ...

    }

Если я не использую TableModel, он работает, например: this.contentTable = new JTable(s, columnNames); Но я не знаю, как изменить таблицу, если есть какие-то новые данные... Вот почему я использую TableModel.

Я не знаю, почему столбцы не отображаются, но данные отображаются...

С уважением!


person XenonUnlimited    schedule 30.04.2013    source источник
comment
на этот вопрос нет ответа, похоже, дайте мне код, пожалуйста, прочитайте Учебное пособие по Oracle JTable, затем отредактируйте свой вопрос с помощью SSCCE, короткого, работоспособного, компилируемого, просто о JFrame с JTable внутри JScrollPane,   -  person mKorbel    schedule 01.05.2013
comment
A, B, C — значения по умолчанию, реализованные в API, в случае, если значение для JTableHeader недоступно.   -  person mKorbel    schedule 01.05.2013
comment
@mKorbel я сделал SSCCE, но получил ответ сейчас, поэтому я не буду его добавлять ... Спасибо за совет ..   -  person XenonUnlimited    schedule 01.05.2013


Ответы (1)


В MyTableModel вам нужно переопределить

public String getColumnName(int column)

чтобы вернуть ваши данные, например.

public String getColumnName(int column) {
  return columnNames[column];
}

Вы также захотите переопределить

getColumnCount();

и findColumnName();

person user949300    schedule 30.04.2013
comment
В вашем случае вы, вероятно, можете использовать DefaultTableModel, чтобы сэкономить немного работы. Но, вообще, DefaultTableModel воняет — лучше сделать то, что сделали вы, и написать свой собственный подкласс AbstractTableModel. - person user949300; 01.05.2013