【问题标题】:JScrollPane and sizing issuesJScrollPane 和大小问题
【发布时间】:2013-04-04 02:51:39
【问题描述】:

在处理“打包”JPanel 并允许滚动条的正确方法方面,我遇到了很大的问题。

我省略了一些代码,但我相信提供的内容就足够了。

问题在于 JScrollBar 要么不显示,要么无法与之交互(如果我将滚动条设置为始终具有垂直条)。

这是一个描述这个的图像:

![不存在滚动条][1]

ProjectPanel(扩展 JPanel)具有固定大小,并且如您所见,扩展得比可见视口更远。无法获取 JPanel (ProjectSelector) 的计算高度,因为 ProjectPanels 也可以这样转换:

![他们需要填充为网格][2]

如果有人可以帮助提供有关如何执行此操作的一些见解,那就太好了。到目前为止,我不惜一切代价不使用外部 API,因为这弊大于利。

问题:

如何将首选尺寸的高度设置为“灵活”,以便在添加组件时它可以扩展?如果这不理想/不可能,我怎么能正确地让 JScrollPane 有效地显示 JPanel 的所有组件?

【问题讨论】:

  • 不要设置首选尺寸选择器。滚动窗格将其用作确定何时显示其滚动条的一部分
  • @MadProgrammer,如果我不这样做,那么流布局会水平组织它们。我可以提供一个示例图像向您展示,但它不起作用。我不希望有任何水平滚动可用。
  • 即。让 LayoutManager 确定面板的首选大小。
  • 如果我不指定面板的宽度:i.imgur.com/a9fIJd2.png
  • @Legend 我正要解决这个问题,看看WrapLayout,它解决了这个问题

标签: java swing layout user-interface jpanel


【解决方案1】:

如果我不这样做,那么流布局会水平组织它们

也许您应该使用 GridLayout。

如果没有,那么您可以尝试Wrap Layout,它是一个根据需要换行到新行的 FlowLayout。

【讨论】:

  • 我最初使用的 GridLayout 的问题是它不能保持内部面板的大小。它还定义了无法使用的列。
  • 是的,我发帖看到你的两张图后才意识到。
  • 我可能会自己制作,但看看 Wrap Layout 的工作原理会有所帮助。感谢您的回答和时间。很抱歉给您带来巨大的不便。这个程序是针对作品集的,所以我使用的外部 API 越少,我的工作就越可信。
【解决方案2】:

如果您正在寻找不同的布局,何不试试MiGLayout?它是一个非常强大和灵活的布局管理器。

查看详细示例here

从该链接,重写 initUI 方法以查看您的问题感兴趣的行为:

public void initUI() {
    this.setPreferredSize(new Dimension(100, 100));
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setJMenuBar(initMenuBar());
    this.getContentPane().add(new JScrollPane(mainPanel = initMainPanel()));
    this.setLocationByPlatform(true);
    this.pack();        
}

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 2011-01-03
    • 2013-01-01
    • 2023-03-29
    • 2011-08-27
    • 1970-01-01
    • 2012-08-10
    • 2016-05-28
    相关资源
    最近更新 更多