【发布时间】:2013-11-08 20:41:49
【问题描述】:
我希望用户在保持相同纵横比的同时调整窗口大小(宽度>高度的矩形。换句话说,如果高度改变,我想强制宽度改变更大的量,反之亦然.最好,我希望在调整窗口大小时发生调整大小,而不是之后。下面的代码根本不适合我..每当我尝试调整窗口大小时,它只会恢复到原来的大小。甚至当我拖动调整大小时,它不会改变宽度和高度。任何帮助将不胜感激!
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;
}
【问题讨论】:
-
组件可能在布局管理器的控制之下...
-
如果你能提供一个SSCCE 来重现问题,找到解决方案会更容易。
-
一个简单的解决方案可能是编写一个布局管理器,其唯一职责是根据提供的比率调整子组件的大小,以便子组件始终适合父容器但保持纵横比正确