有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>

有人知道问题出在哪里吗

1

注意JTable包含四行,其中只有两行可见


共 (3) 个答案

  1. # 1 楼答案

    BoxLayout接受来自JComponents的大小,这与为JPanel实现的默认FlowLayoutpreu的问题相同

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

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

    3. 使用NestedLayout,通过使用BorderLayout将两个JLabel放在EASTWEST区域

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

  2. # 2 楼答案

    过去,我在一个带有FlowLayout的面板中使用JScrollPane时遇到了一些问题。这种行为可能很棘手,当内容增长时,可能会出现水平滚动条,或者FlowLayout应该添加新行

    在您的情况下,我将用BorderLayout替换FlowLayout

    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);
    
  3. # 3 楼答案

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