Заголовки столбцов JTable не отображаются, вместо этого они обозначены буквами «A», «B», - PullRequest
3 голосов
/ 11 июля 2011

Я новичок в использовании Java GUI и пытаюсь составить таблицу с некоторыми результатами оценки моей футбольной команды.

Сначала я использовал DefaultTableModel, и у меня не было проблем с именами столбцов,Они хорошо показали себя с помощью JScrollpane.Затем я хотел попробовать реализовать свою собственную TableModel, и с тех пор я больше не вижу заголовки столбцов таблицы.Они отображаются как «A», «B», ..., «G», в то время как я все еще использую ScrollPane.Мне нужна эта TableModel, потому что я планирую использовать точно такую ​​же структуру для добавления некоторых других вещей.

Может кто-нибудь помочь мне, пожалуйста, пытаясь решить эту проблему.

Спасибо

class MyTableModel extends AbstractTableModel{  
    private String[] titles;  
    private Object[][] data;

    public MyTableModel(String [] t, Object [][] d){
        this.titles = t;
        this.data   = d;
    }
    public Object getValueAt(int row, int col){
        return data[row][col];
    }
    public int getColumnCount(){
        return titles.length;
    }
    public int getRowCount(){
        return data.length;
    }
}

public static void main(String[] args) {  
    SwingUtilities.invokeLater(new Runnable() {  
        public void run() {  
            createAndShowGUI();  
        }  
    });  
}

public JPanel createContentPane(){
    mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout(10, 10));

    String [] titles = {"Naam", "Doelpunten", "% Doelpunten", "Assists", "% Assists", "", "% Totaal"};
    Object [][] data = new Object[spelers.size()][titles.length];
    int counter = 0;
    spelers = getSpelersFromDB("all");
    for (Iterator<Speler> iter = spelers.iterator(); iter.hasNext();){
        Speler temp = iter.next();
        data[counter][0] = temp.naam;
        data[counter][1] = temp.doelpunten;
        data[counter][2] = String.format("%3.1f %%", berekenPercentageDoelpunten(temp));
        data[counter][3] = temp.assists;
        data[counter][4] = String.format("%3.1f %%", berekenPercentageAssists(temp));
        data[counter][5] = "";
        data[counter][6] = String.format("%3.1f %%", berekenTotaalPercentage(temp));
        counter += 1;
    }

    JTable table = new JTable(new MyTableModel(titles, data));

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(500, 500));
    mainPanel.add(scrollPane, BorderLayout.CENTER);
    mainPanel.setOpaque(true);
    return mainPanel;
}

private static void createAndShowGUI(){
    frame.setMinimumSize(new Dimension(700, 300));
    frame.setPreferredSize(new Dimension(700, 500));
    frame.setMaximumSize(new Dimension(800, 800));

    Voetbal demo = new Voetbal();
    frame.setContentPane(demo.createContentPane());
    frame.setJMenuBar(demo.createJMenuBar());
    frame.setVisible(true);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

1 Ответ

7 голосов
/ 11 июля 2011

AbstractTableModel всегда будет возвращать 'A', 'B' .... и т. Д. В качестве имени столбца (см. Документацию), вам нужно переписать метод getColumnName (), например:

    public String getColumnName(int column) {
        return titles[column]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...