2014-03-18 4 views
0

У меня есть JTable, который извлекает информацию из таблицы базы данных MySQL. Заголовки столбцов называются так же, как и в базе данных.Изменение заголовков столбцов JTable с данными MySQL

Вот код для создания JTable:

JScrollPane spBlockViewSchedule = new JScrollPane(); 
spBlockViewSchedule.setBounds(10, 285, 763, 185); 
pnlBlockSched.add(spBlockViewSchedule); 

tblBlockViewSchedule = new JTable(); 
spBlockViewSchedule.setViewportView(tblBlockViewSchedule); 

Вот код, который заполнит JTable:

private void populateTable(String sql, JTable table) { 
     try { 
      pst = DbConnection.conn.prepareStatement(sql); 
      rs = pst.executeQuery(); 

     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 

     table.setModel(DbUtils.resultSetToTableModel(rs)); 
    } 

Как изменить имена столбцов, отображаемых в JTable без изменения имена столбцов самой таблицы базы данных?

+2

несвязанный: не делайте никаких ручных измерений/размещения компонентов, когда-либо - это исключительная ответственность LayoutManager. – kleopatra

ответ

2

Создайте пустой DefaultTableModel с кодом, как:

String[] columnNames = {"Course Code", "Subject Code", "Year Level", ...}; 
DefaultTableModel model = new DefaultTableModel(columnNames, 0); 

Затем в коде, где вы читаете данные из ResultSet вы добавляете данные в TableModel с использованием метода addRow(....). Что-то вроде:

while (rs.next()) 
{ 
    Vector row = new Vector(); 

    for (int i = 1; i <= columns; i++) 
    { 
     row.addElement(rs.getObject(i)); 
    } 

    model.addRow(row); 
} 

Finaly создать таблицу с помощью:

JTable table = new JTable(model); 

Edit:

Поскольку вы используете 3-й код партии вам необходимо либо изменить способ добавления данных в модели , Я дал вам базовый код выше. Вы можете увидеть исходный код Table From Database Example от Table From Database для получения полного примера.

Или, вы можете изменить заголовки столбцов после того, как таблица создается с помощью следующего кода:

table.getColumn("course_code").setHeaderValue("Course Code"); 
... 
table.repaint(); 

Edit 2:

Вы можете получить TableColumn от TableColumnModel:

TableColumnModel tcm = table.getTableColumnModel(); 
tcm.getColumn(0).setHeaderValue("Course Code"); 
... 
table.repaint(); 
+0

Спасибо за этот ответ. Это может быть то, что мне нужно. Я добавил метод, который заполняет JTable для сообщения. Не могли бы вы изменить этот ответ, чтобы он совпал с методом populateTable(), который только что был опубликован? – silver

+0

@ohtph, 'Я добавил метод, который заполняет JTable для сообщения' - нет, вы этого не сделали. Вы добавили код, который выполняет сторонний класс. Если вы не можете изменить этот код, это не поможет нам. См. Править. – camickr

+0

Я поставил подстановку setHeaderValue() под кодом, который создает JTable. Однако он бросает 'IllegalArgumentException: Identifier not found'. – silver

0

попробовать этот

 int colCount = 0; 
     ResultSetMetaData rsMetaData = null; 
     colCount = rsMetaData.getColumnCount(); 
     for (int k = 1; k <= colCount; k++) { 
     { String columnName = null; 

     columnName = rsMetaData.getColumnName(k); 
     System.out.println(columnName); 
     } 

использовать этот код одновременно с вашим кодом кокетливой.

+2

это, вероятно, похоже на то, что OP уже делает ... Заголовки те же, что и в DB, ​​который явно ** не **, что требуется OP – kleopatra

0

В каждом JTable есть TableModel. Эта таблицаModel определяет столбцы (имена и типы данных)

так что найдите свою модель таблицы и соответствующим образом измените ее.

+0

Можете ли вы любезно показать мне пример кода? – silver

+0

Посмотрите на http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html – sheu

+0

Я попытался инициализировать String [] columnNames безрезультатно и использовать DefaultTableModel, однако, я Я не уверен, как поместить данные в параметры, так как они из базы данных. Более подробная помощь приветствуется. – silver

1

В настоящее время я сталкиваюсь с той же проблемой, что и вы.

Эта линия:

table.setModel(DbUtils.resultSetToTableModel(rs)); 

обеспечивается r2xml.jar очень удобно :)

Я преодолел проблему установки псевдонима к моему SQL SELECT заявлению. Например,

SELECT 
EngagementMethodID AS [ID], 
EngagementMethodDescription AS [Engagement Method Description] 

FROM [STUDENT].[EngagementMethod] 

Это будет заполнить заголовок столбца, как ID и Метод Взаимодействие Описание, как хотелось.

Надеюсь, что это поможет. Несмотря на возраст этого вопроса? haha ... Просто поделитесь

Смежные вопросы