JTable не показывает заголовки столбцов

1

У меня есть небольшая проблема в этом коде. Я хочу показать JTable с заголовками столбцов, но проблема в том, что column titles не отображаются, как показано на скриншоте ниже:

private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DB_CONNECTION = "jdbc:oracle:thin:@localhost:1521:DB";
private static final String DB_USER = "*******";
private static final String DB_PASSWORD = "********";
Connection conn = null;
Statement stmt = null;
static Vector<Vector<String>> dataJ, dataC, data;
Vector<String> columnJ,

public void getCleubJoueurData() {
    data = new Vector<Vector<String>>();
    colum = new Vector<String>();
    colum.add("nom");
    colum.add("nom_cleub");
    colum.add("numero_maillot");
    colum.add("nationalite");

    String query = "SELECT joueur.NOM,CLEUB.NOM_CLEUB," +
                    "JOUEUR_CLEUB.NUMERO_MAILLOT, joueur.NATIONALITE " +
                    "FROM joueur JOIN JOUEUR_CLEUB ON joueur.ID_J=" + 
                    "JOUEUR_CLEUB.ID_J JOIN CLEUB ON JOUEUR_CLEUB.ID_C=CLEUB.ID_C";

    try {
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        conn = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        while (rs.next()) {
            Vector<String> vstring = new Vector<String>();
            vstring.add(rs.getString("nom"));
            vstring.add(rs.getString("nom_cleub"));
            vstring.add(rs.getString("numero_maillot"));
            vstring.add(rs.getString("nationalite"));

            data.add(vstring);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException ex) {
            }
        }
    }
}

public App() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 882, 477);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBackground(Color.WHITE);
    tabbedPane.setBounds(40, 43, 812, 390);
    contentPane.add(tabbedPane);
    JPanel panel = new JPanel();
    tabbedPane.addTab("joueurs", null, panel, null);
    panel.setLayout(null);

    getJoueurData();
    DefaultTableModel mode = new DefaultTableModel(data, column);

    table = new JTable(model);
    table.setToolTipText("");
    table.setBounds(0, 94, 819, 269);
    panel.add(table);

}
  • 0
    Разве этот код не дает вам ошибок, или это опечатка !!!! Вы создаете ссылку DefaultTableModel с режимом имени, хотя вы передаете new JTable(model) затем вы создали colum = new Vector <String> (), но вы передаете new DefaultTableModel(data, column) . Пожалуйста, исправьте эти ошибки, если они просто опечатки, иначе упомяните их где-то :-)
Теги:
user-interface
swing
jtable

2 ответа

1
Лучший ответ
  1. Не используйте пустые макеты. (И не устанавливайте границы)

  2. Оберните свой стол в JScrollPane. JScrollPane покажет заголовки. Если вы не хотите использовать JScrollPane, вы можете получить JTableHeader таблицы и добавить ее отдельно

Бывший: (с JScrollPane)

JPanel container = new JPanel();  // default FlowLayout
JScrollPane scrollPane = new JScrollPane(table);
//container.add(table);  // don't add the table, just the JScrollPane
container.add(scrollPane);

Последнее: (без JScrollPane)

JPanel container = new JPanel(new BorderLayout());
container.add(table, BorderLayout.CENTER);
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
  • 0
    спасибо, это работа, проблема была в scrollPane и NullLayout, после этого я меняю макет на макет границы и добавляю scrollPane в таблицу, у меня это работает
1

В документации JTable указано, что вы обычно хотите использовать JTable в сочетании с JScrollPane. Если не:

JTables обычно размещаются внутри JScrollPane. [...] Обратите внимание: если вы хотите использовать JTable в отдельном представлении (вне JScrollPane) и хотите, чтобы заголовок отображался, вы можете получить его с помощью getTableHeader() и отобразить его отдельно.

Я бы рекомендовал сам обернуть в JScrollPane:

...
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
...
  • 0
    спасибо, это работа, проблема была в scrollPane и NullLayout, после этого я меняю макет на макет границы и добавляю scrollPane в таблицу, у меня это работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню