我有一个BoxLayout(在BorderLayout的面板中),我在其中垂直放置了一个JTable和一个按钮。我希望表格具有固定宽度,并且高度应调整自身大小以填充面板。目前,我对显示的宽度很好,但并不是说它填满了整个面板高度。例如,如果表中的数据为零,我只想显示列名。我已经尝试过像setViewportView()和setPreferredSize()这样的东西,但不能真正让它工作。有什么建议吗?是在布局中还是在滚动窗格中?
String[] columnNames = { "Date", "Type"
};
Object[][] data = {
};
JTable myTable = new JTable(data, columnNames);
JButton okButton = new JButton("OK");
JPanel panWest = new JPanel();
panWest.setLayout(new BoxLayout(panWest, BoxLayout.PAGE_AXIS));
JScrollPane scrollPane = new JScrollPane(myTable);
panWest.add(scrollPane);
panWest.add(okButton);
编辑这就是最终起作用的原因:
Dimension dimension = new Dimension();
dimension.height = (myTable.getRowCount()*myTable.getRowHeight())+
myTable.getTableHeader().getPreferredSize().height;
dimension.width = myTable.getColumnModel().getTotalColumnWidth();
scrollPane.setMaximumSize(dimension);
我希望桌子有一个固定的宽度和高度 应该调整自身大小以填充面板。
和
我有一个BoxLayout(在BorderLayout的面板中),我在其中放了一个 JTable 和垂直按钮。
有三种(仅提及简单)方法
-
使用 built_in
LayoutManager
表示JPanel
-FlowLayout
(FLowLayout.CENTER
),-
在您想要的情况下覆盖
FLowLayout.LEFT
或RIGHT
, -
JComponent
由FlowLayout
铺设的永远不会在没有以编程方式更改XxxSize
并由revalidate
&repaint
通知的情况下调整大小, -
通过覆盖
JTable.setPreferredScrollableViewportSize(new Dimension(int, int));
为 JScrollPane 设置适当的大小, -
JScrollPane 接受此维度作为初始大小,必需的是使用
JFrame.pack(
),然后再JFrame.setVisible(true)
-
-
BoxLayout
接受min, max and preferred size
,覆盖所有这三种尺寸以获得JScrollPane
-
(
half solution, but most comfortable
) 将JPanel
LayoutManager
更改为BorderLayout
,-
将
JScrollPane
与JTable
放在BorderLayout.EAST/WEST
区域, -
然后覆盖
JTable.setPreferredScrollableViewportSize(new Dimension(int, int));
, -
JScrollPane
将占据整个区域BorderLayout.EAST/WEST
,并且只能在heights
坐标上调整大小
-
- 使用
MigLayout
,这里有一些关于MigLayout
和JScrollPane
的帖子(带JTextArea
,JTable
)