当前位置: 首页 > 面试题库 >

BorderLayout:嵌套的CENTER面板增加,但不调整外部面板的大小

阙新觉
2023-03-14
问题内容

我有一个主JPanel,它实现Scrollable并使用BorderLayout。它包含一个NORTH只读JEditorPane,一个带有FlowLayout的CENTER
JPanel(可动态添加JButton)和一个SOUTH JLabel(均按该顺序添加)。当将许多JButton添加到CENTER
JPanel时,这些按钮将缠绕到下一行:问题是CENTER JPanel占用的垂直空间超出了一行,只是与SOUTH
JLabel重叠,并且不会导致整个JPanel动态增长或显示垂直滚动条。另一方面,将足够多的文本添加到NORTH
JEditorPane以使其换行到下一行时,它会执行我期望的行为,并向下推CENTER JPanel并显示垂直滚动条。

这里是主要的JPanel Scrollable实现:

public Dimension getPreferredScrollableViewportSize() {
    return getPreferredSize();
}

public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
    return Math.max(visibleRect.height * 9 / 10, 1);
}

public boolean getScrollableTracksViewportHeight() {
    if (getParent() instanceof JViewport) {
        JViewport viewport = (JViewport) getParent();
        return getPreferredSize().height < viewport.getHeight();
    }
    return false;
}

html" target="_blank">public boolean getScrollableTracksViewportWidth() {
    return true;
}

public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
    return Math.max(visibleRect.height / 10, 1);
}

我究竟做错了什么?如何使CENTER JPanel向下推动SOUTH JLabel来扩展整个主JPanel?


问题答案:

问题是当按钮包装到下一行时,FlowLayout不会重新计算首选大小。

您应该能够使用WrapLayout。

WrapLayout扩展FlowLayout并在组件换行到新行时设置适当的首选大小。



 类似资料:
  • 我对Java不熟悉,所以我正在尝试一些事情。 我正在玩Java布局,特别是使用BorderLayout的嵌套面板。 我的问题是,我无法绘制嵌套面板。我可以画到主面板,但不能画嵌套在其中的面板。 如果你能告诉我哪里出了问题,我会非常高兴。 这是我的主要代码: 这是主面板。 然后创建两个嵌套面板,并将其添加到主面板中。 这里我称之为在屏幕上绘制形状的类。 这里是问题,因为我无法绘制嵌套面板的形状。 然

  • 我有一个JavaFX应用程序,它只有一个FXML文件。在这个文件中,我有一个AnchorPane,里面有一个StackPane。下面是截图: 当我启动这个应用程序时,我想用AnchorPane自动调整StackPane的大小。因此;StackPane将自动获得当前可用的宽度和高度。当我调整应用程序大小时,AnchorPane将自动调整大小,但StackPane将保持固定大小。 如何自动调整Stac

  • 我想有一个StackPane作为根节点,它使叠加效果变得容易。 但是通过使用stackpane作为根,内部控件可以移出窗口。在下面的示例中,如果您将窗口缩小到足够小,您可以看到控件移出窗口,例如菜单栏和列表视图都移到左侧。我想防止这种情况,我该怎么做? 更新: 为StackPane内部的BorderPane设置对齐方式似乎有所帮助:

  • 我正在尝试创建一个仪表板与可拖动和可调整大小的面板与PrimeFaces。当我将可调整大小添加到面板时,它就不起作用了。如果我在仪表板外使用它,它的工作很好。你能不能有一个请帮助我如何添加大小到面板上的仪表板。

  • 我试图实施ProLoser在我的Plunk链接中提供的解决方案。我的问题是,每当我按下链接而不是打开链接下方的子视图时,它就会覆盖整个视图。 我需要明白如何解决这个问题。 我的流程是这样的:- 我的布局: 指数html: 所容纳之物html: 我的代码:

  • 如果我尝试更新面板中的任何内容 它抛出:java.lang.IllegalArgumentException:ThreatListPanel: 这是xhtml 这是更新bean