3

我有一个 JFrame 窗口,我想在它的中间添加一个可滚动的 JTable。我有一个方法,称为collectionTableScrollPane()生成JScrollPane(我知道这可以保证工作)。

然后我继续将它添加到我的mainPanel面板中。但是,我希望在JScrollPane. 从逻辑上讲,我会创建一个JPanel居中的馆藏FlowLayout,并Box.createHorizontalStrut(30)JScrollPane.

JPanel tableHolderPanel = new JPanel(new FlowLayout());
mainPanel.add(tableHolderPanel);
tableHolderPanel.add(Box.createHorizontalStrut(30));
tableHolderPanel.add(collectionTableScrollPane());
tableHolderPanel.add(Box.createHorizontalStrut(30));

但是,我得到了一个奇怪的结果,窗口中间的 JScrollPane(由箭头表示)有点失效。

有谁知道问题是什么?

1

请注意,其中JTable包含四行,其中只有两行是可见的。

4

3 回答 3

3

过去,当我JScrollPane在面板内部使用FlowLayout. 这种行为可能很棘手,当内容增长时,可能会出现水平滚动条,或者 FlowLayout 应该添加一个新行。

在您的情况下,我将替换为FlowLayouta BorderLayout

JPanel tableHolderPanel = new JPanel(new BorderLayout());
mainPanel.add(tableHolderPanel);
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.WEST);
tableHolderPanel.add(collectionTableScrollPane(), BorderLayout.CENTER);
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.EAST);
于 2012-08-28T09:17:26.010 回答
2

据我所知,Box应该与 一起使用BoxLayout,这可能会给您带来一些问题。相反,为什么不在tableHolderPane

于 2012-08-28T09:02:34.467 回答
1

BoxLayout接受来自JComponents的大小,与默认FlowLayoutpre_implemented相同的问题JPanel

  1. PreferredSize你必须通过覆盖JPanel嵌套返回JScrollPane

  2. 使用另一个LayoutManager,例如GridBagLayout或今天MigLayout

  3. 使用NestedLayout, 通过使用BorderLayout将两个JLabels (返回 的 ei PreferredSize)放置到EASTandWEST区域

  4. 一切都取决于您是否真的要创建空白区域以及是否应该调整大小

于 2012-08-28T09:22:13.520 回答