我有一个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);
EDIT 这就是最终的工作:
Dimension dimension = new Dimension();
dimension.height = (myTable.getRowCount()*myTable.getRowHeight())+
myTable.getTableHeader().getPreferredSize().height;
dimension.width = myTable.getColumnModel().getTotalColumnWidth();
scrollPane.setMaximumSize(dimension);
答案 0 :(得分:1)
我希望桌子有一个固定的宽度和高度 应该调整自己以填补小组。
和
我有一个BoxLayout(在BorderLayout的一个面板中)我放了一个 JTable和一个垂直按钮。
有三种(仅提到简单的)方式
对LayoutManager
使用built_in JPanel
- FlowLayout
(FLowLayout.CENTER
),
在你想要的情况下覆盖FLowLayout.LEFT
或RIGHT
,
JComponent
FlowLayout
永远无法通过编程方式更改XxxSize
并通过revalidate
& repaint
,
通过覆盖JTable.setPreferredScrollableViewportSize(new Dimension(int, int));
,
在JFrame.pack(
JFrame.setVisible(true)
)
BoxLayout
接受min, max and preferred size
,覆盖JScrollPane
的所有这三种尺寸
(half solution, but most comfortable
)将LayoutManager
的{{1}}更改为JPanel
,
将BorderLayout
与JScrollPane
区域放在JTable
区域,
然后覆盖BorderLayout.EAST/WEST
,
JTable.setPreferredScrollableViewportSize(new Dimension(int, int));
将占据JScrollPane
的整个区域,并且只能在BorderLayout.EAST/WEST
坐标
heights
,以下是关于MigLayout
和MigLayout
的一些帖子(JScrollPane
,JTextArea
)