2

我希望用户能够调整 JFrame 的宽度/高度,同时保持其宽度和高度之间的相同比率。换句话说,我想强制高度随着宽度保持相同的框架形状而变化。

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;
    }
4

2 回答 2

4

看看 J 帧以纵横比调整大小

我认为这就是你所需要的。

@Override
public void componentResized(ComponentEvent arg0) {
    int W = 4;  
    int H = 3;  
    Rectangle b = arg0.getComponent().getBounds();
    arg0.getComponent().setBounds(b.x, b.y, b.width, b.width*H/W);

}
于 2013-11-08T17:32:47.410 回答
2

尝试在调整框架大小时使用 componentEvent 发出信号。调整框架大小时,请跟踪更改了哪个维度(x 或 y)。使用 getSize() 方法获取框架尺寸,然后获取 .getWidth() 或 .getHeight() 来获取框架调整到的新尺寸。使用更改尺寸的新尺寸来计算其他尺寸的所需尺寸,并使用 .setSize(int width, int height) 设置框架的尺寸。

如果您在相同的调整大小中同时更改宽度和高度,这可能会出现问题,如果是这样,您始终可以将高度从宽度确定下来,反之亦然

于 2013-11-08T17:48:39.820 回答