Хотя я прочитал все соответствующие ответы, я все еще зациклился на вопросе о том, как отображать заголовки столбцов в JTable. Я попытался добавить JScrollPane, но это не сработало. Любая помощь пожалуйста. Ниже приведен код:Заголовки столбцов не отображаются в JTable
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new CardLayout(0, 0));
final JPanel panel = new JPanel();
final JPanel panel_1 = new JPanel();
final JTable table = new JTable();
frame.getContentPane().add(panel, "name_762477085406274");
panel.setLayout(null);
JButton btnOk = new JButton("ok");
btnOk.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
panel.setVisible(false);
panel_1.setVisible(true);
final Connection connect;
final Statement statement;
final ResultSet resultset;
try
{
Class.forName("com....");
connect = DriverManager.getConnection("jdbc:mysql...");
System.out.println("Connecting succesfully");
statement = connect.createStatement();
resultset = statement.executeQuery("select ProjName as 'Project Name', ProjID as 'Project ID' from projdetails");
//table.setModel(DBUtils.resultSetToTableModel(resultset));
ResultSetMetaData rsmetadata = resultset.getMetaData();
System.out.println(rsmetadata);
int columns = rsmetadata.getColumnCount();
System.out.println(columns);
DefaultTableModel dtm = new DefaultTableModel();
Vector columns_name = new Vector();
Vector data_rows = new Vector();
for (int i =1; i<=columns;i++)
{
columns_name.addElement(rsmetadata.getColumnName(i));
System.out.println(columns_name);
}
dtm.setColumnIdentifiers(columns_name);
//System.out.println(resultset);
/*while(resultset.next())
{
Array lastname = resultset.getArray("ProjName");
//lastname =
System.out.println(lastname);
}*/
while (resultset.next())
{
data_rows = new Vector();
for(int j =1; j<=columns; j++)
{
data_rows.addElement(resultset.getString(j));
}
dtm.addRow(data_rows);
}
table.setModel(dtm);
/* final String lastName = resultset.getString("ProjName");
//final String lastName1 = resultset.getString("ProjID");
System.out.println(lastName);
//System.out.println(lastName1);
lbl_ShowAllProjects.setText(lastName);//+" "+lastName1);
System.out.println("\n\n\t\t");*/
}
catch(Exception e){
System.out.println("Cannot connect to database server");
e.printStackTrace();
}}
});
btnOk.setBounds(94, 117, 89, 23);
panel.add(btnOk);
frame.getContentPane().add(panel_1, "name_762480663629692");
panel_1.setLayout(null);
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"Project Name", "Project ID"
}
) {
boolean[] columnEditables = new boolean[] {
false, false
};
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
table.getColumnModel().getColumn(0).setResizable(false);
table.getColumnModel().getColumn(1).setResizable(false);
table.setBounds(25, 11, 399, 216);
panel_1.add(table);
//final JScrollPane scrollPane = new JScrollPane(table);
//JScrollPane scrollPane = new JScrollPane(table);
//panel_1.add(scrollPane);
//table.setFillsViewportHeight(true);
//frame.getContentPane().add(new JScrollPane(table));
// JScrollPane.setViewPortView(table);
}
1) Да, положи JTable в JScrollPane. 2) Избавьтесь от ** all ** 'setBounds (...)' и нужных макетов в вашей программе, так как они затруднят Java для правильной настройки JTable и JScrollPane. Вместо этого используйте менеджеров компоновки, так как это то, за что они предназначены. 3) Давайте посмотрим вашу лучшую попытку сделать это с помощью JScrollPanes как [Минимальная, полная и проверенная программа примеров] (http://stackoverflow.com/help/mcve). В вашем комментированном коде содержится некорректируемый код. –
Вам нужно использовать JScrollPane. Не использовать его не поможет. Отправьте полный пример, воспроизводящий проблему. Удалите из него все ненужные вещи JDBC. –