gpt4 book ai didi

java - 调整 JFrame 的大小并保持纵横比?

转载 作者:行者123 更新时间:2023-11-29 05:34:53 32 4
gpt4 key购买 nike

我希望用户在调整窗口大小的同时保持相同的纵横比(宽度 > 高度的矩形。换句话说,如果高度改变,我想强制宽度改变更大的量,反之亦然. 最好是,我希望在调整窗口大小时而不是之后调整大小。下面的代码根本不适合我.. 每当我尝试调整窗口大小时,它都会恢复到原来的大小。甚至当我拖动以调整大小时,它不会改变宽度和高度。任何帮助将不胜感激,谢谢!

public void componentResized(ComponentEvent arg0)
{
int setHeight = arg0.getComponent().getHeight();
int setWidth = arg0.getComponent().getWidth();
double newWidth = 0;
double newHeight = 0;
{
if(setHeight != oldHeight)
{
heightChanged = true;
}
if(setWidth != oldWidth)
{
widthChanged = true;
}
}
{
if(widthChanged == true && heightChanged == false)
{
newWidth = setWidth;
newHeight = setWidth*HEIGHT_RATIO;
}
else if(widthChanged == false && heightChanged == true)
{
newWidth = setHeight * WIDTH_RATIO;
newHeight = setHeight;
}
else if(widthChanged == true && heightChanged == true)
{
newWidth = setWidth;
newHeight = setWidth*HEIGHT_RATIO;
}
}

int x1 = (int) newWidth;
int y1 = (int) newHeight;
System.out.println("W: " + x1 + " H: " + y1);
Rectangle r = arg0.getComponent().getBounds();
arg0.getComponent().setBounds(r.x, r.y, x1, y1);
widthChanged = false;
heightChanged = false;
oldWidth = x1;
oldHeight = y1;
}

最佳答案

使用 Java(AWT 限制)没有简单的方法来实现这一点。

可能的解决方案:

  • 在用户停止调整大小后修正窗口大小(从用户角度来看很烦人)
  • 使用不带任何装饰的不可调整大小的 JWindow/JDialog 并以编程方式重新实现窗口大小调整。游标形状等可用于 Swing/AWT。我在一个商业项目中做过这个(所以没有来源:-))。唯一的问题是:它在平台/jdk 版本方面非常不稳定(尽管 AWT/Swing 近年来变化不大)。

在用户拖动/调整大小时操作窗口大小将无法正常工作

关于java - 调整 JFrame 的大小并保持纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868151/

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