gpt4 book ai didi

java - 如何获得布局中的可用空间?

转载 作者:行者123 更新时间:2023-12-01 09:17:51 27 4
gpt4 key购买 nike

我有一个具有以下分布的 borderLayout: enter image description here

在红色位置,我想放置一个缩放图像,以便它填充所有可用空间。我还可以选择以真实图像的不同比例显示图像(20%、50%、100%...)。

我正在尝试找到使图像完美贴合的比例因子:

    //GET VALUES
int imageWidth = image1.getWidth();
int imageHeight = image1.getHeight();
System.out.println("Image: "+imageWidth + " "+ imageHeight);
int targetWidth = this.getBounds().width;
int targetHeight = this.getBounds().height;
System.out.println("Target: " + targetWidth + " "+ targetHeight);

//GET SCALE
float scaleWidth=1;
float scaleHeight=1;
if (imageWidth > targetWidth) {
scaleWidth = (float) targetWidth / (float) imageWidth;
}
if (imageHeight > targetHeight) {
scaleHeight = (float) targetHeight / (float) imageHeight;
}

return min(scaleWidth, scaleHeight);

问题是我找不到可用空间的大小(对于 BorderLayout.CENTER)。我在代码中写了窗口大小,但这是不正确的,我也尝试过:

 this.getLayout().preferredLayoutSize(this).width; 

但它也给出了一个不正确的值,或者至少不是我想要找到的值。我找不到与尺寸相关的任何其他方法。尝试从面板中获取值是不可行的,因为我在创建它之前需要该值。

谁能告诉我如何找到这个值?谢谢。

最佳答案

您不应该尝试获取可用的大小。

如果您确实想知道这个值,那么您应该进行自定义绘制并动态调整图像大小并在 paintComponent() 方法中绘制图像。

所以基本代码如下:

public class ImagePanel extend JPanel
{
public ImagePane(...)
{
}

@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

int width = getWidth();
int height = getHeight();

// do your scaling

g.drawImage(...);
}
}

或者,如果您不想进行动态缩放,则可以向面板添加 ComponentListener 并处理 componentResized 事件。然后您可以获得面板的实际尺寸并进行缩放计算。阅读 Swing 教程中关于 How to Write a Component Listener 的部分了解更多信息和示例。

最后你还可以使用 Darryl 的 Stretch Icon这将根据可用空间自动缩放图标。您所需要做的就是使用 StretchIcon 创建一个 JLabel 并将其添加到您的 GUI。

关于java - 如何获得布局中的可用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com