2011-04-27 66 views
0

我有一个放置在JPanel中的JTable,然后将它放置在另一个具有ScrollPane的JPanel的JFrame中。如果解释混乱,可以在下面看到总体思路。我已经将我的JTable设置为自动调整最后一列的大小,但它从不自动调整大小。问题是什么?JTable不会自动调整最后一列的大小

的JFrame - >的JPanel - >的JTable
- >的JPanel - >滚动窗格

我的代码:
this是指我的课延伸JFrame

this.setLayout(new BorderLayout()); 

JTextArea log = new JTextArea(20, 50); 
log.setEditable(false); 
JScrollPane logScrollPane = new JScrollPane(log); 

String[] configRow = {"Config File", "Not Loaded"}; 
String[] logRow = {"Log File" , "Not Loaded"}; 
DefaultTableModel dtm = new DefaultTableModel(); 
dtm.addColumn(""); 
dtm.addColumn(""); 
dtm.addRow(configRow); 
dtm.addRow(logRow); 

JTable status = new JTable(dtm); 
status.setTableHeader(null); 
status.setShowGrid(false); 
status.setEnabled(false); 
status.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 

JPanel tablePanel = new JPanel(); 
tablePanel.setLayout(new BorderLayout()); 
tablePanel.add(status, BorderLayout.LINE_START); 

JPanel logPanel = new JPanel(); 
logPanel.add(logScrollPane); 

this.add(tablePanel, BorderLayout.NORTH); 
this.add(logPanel, BorderLayout.SOUTH); 
+0

你在这里寻找什么行为?你想让最后一列获得所有额外的空间吗?如果框架的尺寸缩小了,您是否只希望最后一列缩小? – wolfcastle 2011-04-27 20:37:57

+0

最后一列将加载完整文件路径,所以我希望它根据该大小调整大小 – Hank 2011-04-27 20:42:26

+0

因此,您希望表格根据模型中的数据更改来调整大小?那么我不认为'setAutoResizeMode'会帮助你。这只是基于用户实际调整列或包含表格的窗口来调整大小。如果您希望表格在列中显示的数据发生更改时调整其列的大小,则需要自行处理大小调整。 – wolfcastle 2011-04-27 21:11:12

回答

2

你的JTable必须放置在一个JScrollPane中,以便调整大小以正常工作。您将JTable直接放在JPanel上。

tablePanel.add(new JScrollPane(status), BorderLayout.LINE_START): 
+0

我的最后一列仍然没有调整大小,而且我的面板变得更大并带有额外的不需要的空间 – Hank 2011-04-27 20:07:41

+0

可以通过调用表上的'setPreferredScrollableViewportSize'来修复额外的空间。现在我已经运行了代码,我可以看到我的答案不是解决方案。 – wolfcastle 2011-04-27 20:40:03