JTable java列不会显示
我对JTable列有问题。我创建了JTable,但是列不会显示。是的,我尝试了之前提出的关于这个问题的问题,说是关于添加一个JScrollPane,但是将滚动窗格放在里面会完全破坏我的表,并且该表不可见
我从这个链接(JTable won't show column headers)尝试了frame.getContentPane.add(new JScrollPane(table))
,但没有像我上面所说的那样产生任何效果
我没有使用布局管理器
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM consoles INNER JOIN hardware ON consoles.id=hardware.id");
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
String[] cols = new String[columnCount];
for (i=1;i<= columnCount;i++)
{
cols[i-1] = md.getColumnName(i);
}
DefaultTableModel model = new DefaultTableModel(cols,0);
while (rs.next())
{
Object[] row = new Object[columnCount];
for (i = 1 ; i <= columnCount ; i++)
{
row[i-1] = rs.getObject(i);
}
model.addRow(row);
}
JTable table = new JTable(model);
model.fireTableDataChanged();
table.setCellSelectionEnabled(true);
table.setColumnSelectionAllowed(true);
table.setFillsViewportHeight(true);
table.setSurrendersFocusOnKeystroke(true);
table.setBounds(146,59,763,360);
frame.getContentPane().add((table));
model.fireTableDataChanged();
}
# 1 楼答案
或者,您必须将表包装为
JScrollPane
,如下所示:或者必须单独添加表格标题:
这假定内容窗格的布局管理器是默认的
BorderLayout
# 2 楼答案
您可以尝试从表中获取TableHeader并将其添加到ContentPane:
# 3 楼答案
JTable
设计用于JScrollPane
,例如,它会自动将TableHeader
添加到滚动窗格中而不是
尝试使用
有关详细信息,请参见How to Use Tables
注意,您应该避免使用
setBounds
,而应该使用适当的布局管理器,您还应该避免使用null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题已更新强>
您不应该在模型上调用
fireTableDataChanged
或任何其他事件方法,它们不是供您使用的,而是供模型内使用的在将表格/滚动窗格添加到内容窗格之前,请尝试以下操作
让我来演示一下强>
使用布局管理器
没有布局管理器
问题不在于您向我们展示的代码,问题在于您选择放弃Swing API所基于的核心概念之一。。。布局管理器