我将尝试尽可能简单地解释我的问题,但这是一个棘手的话题,没有遇到过该问题的人可能不知道我在说什么。

我想使用由我的“常规”组件(JLabels,JButtons等)组成的西部,东部,北部,南部等组件的BorderLayout,然后我希望中心组件为“图像”(即:像素) )。为此,我使用了BufferedImage并在JLabel上使用setIcon,该JLabel位于“中心”的面板内部。

但是,我希望图像/像素“流畅”:每当用户调整应用程序大小时,我都想计算JLabel的确切大小(图标/文本间隙设置为0),然后创建一个新图像(像素为我直接在具有该大小的BufferedImage中进行操作(无论如何)。

现在可以使正常工作。但是只有当我通过增大主窗口的大小来调整主窗口的大小(如“操作系统的窗口之一”中的“窗口”)时。

当我缩小主窗口尺寸时,它不起作用。

经过大量测试之后,其原因显然是因为我的JLabel的大小(我在其中执行了setIcon(img))正在影响布局管理器的计算。

因此,出现了数十亿美元的问题:我应该如何使用BorderLayout(或任何其他布局),以便可以在应用中心创建像素的“流体”矩形?

最佳答案

用我会而不是接受的答案来回答我自己的问题,即使它确实起作用了...

通过创建比中心区域的getVisibleRect小几个像素的图片,可以“解决”该问题。

因此,在我的情况下,我从BufferedImage创建了一个ImageIcon,该图像比容纳它的区域小20个像素(宽度和高度)。

然后发生的是,由于图片较小,因此在缩小主窗口尺寸时不会“阻止” /阻止布局管理器将所有内容放置在正确的位置。

因此,通过使用这种hack,我得到了想要的“流畅”行为。

但是,这是一个骇客,其骇客程度无法低估,我敢肯定有一种非常干净的方法可以解决此问题。

关于java - Java Swing:调整自身大小但不影响布局的组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3929513/

10-12 00:39
查看更多