java为什么我没有一个功能正常的JScrollPane?
我有一个JFrame窗口,我想在中间添加一个可滚动的JTable。我有一个名为collectionTableScrollPane()
的方法,它生成JScrollPane
(我知道这是可以保证工作的)
然后,我继续将其添加到我的mainPanel
面板中。但是,我希望在JScrollPane
的左侧和右侧有一些强制30px填充。从逻辑上讲,我将创建一个以JPanel
为中心的保持FlowLayout
,并在JScrollPane
的任一侧添加Box.createHorizontalStrut(30)
JPanel tableHolderPanel = new JPanel(new FlowLayout());
mainPanel.add(tableHolderPanel);
tableHolderPanel.add(Box.createHorizontalStrut(30));
tableHolderPanel.add(collectionTableScrollPane());
tableHolderPanel.add(Box.createHorizontalStrut(30));
但是,我得到了一个奇怪的结果,其中窗口中间的JScLoope(由箭头表示)变得无效。p>
有人知道问题出在哪里吗
注意JTable
包含四行,其中只有两行可见
# 1 楼答案
BoxLayout
接受来自JComponents
的大小,这与为JPanel
实现的默认FlowLayout
preu的问题相同您必须通过覆盖
JPanel
嵌套JScrollPane
返回PreferredSize
,使用另一个
LayoutManager
,例如GridBagLayout
或今天MigLayout
使用
NestedLayout
,通过使用BorderLayout
将两个JLabel
放在EAST
和WEST
区域一切都取决于您是否真的想要创建空白区域,以及是否应该调整大小
# 2 楼答案
过去,我在一个带有
FlowLayout
的面板中使用JScrollPane
时遇到了一些问题。这种行为可能很棘手,当内容增长时,可能会出现水平滚动条,或者FlowLayout应该添加新行在您的情况下,我将用
BorderLayout
替换FlowLayout
:# 3 楼答案
据我所知,
Box
应该与BoxLayout
一起使用,这可能会给您带来一些问题。相反,为什么不在tableHolderPane
上使用EmptyBorder