我有一个复杂的JFrame。它在absoluteLayout中有一个主面板,其中包含按钮和标签,几个jFreeCharts和一个带有特定GridLayout的第二个(子)面板,我用多个标签填充。

无论如何,有没有要调整/缩放整个事情?

pack() does not work because of the layout.


有没有更基本的“ ScaleTheWholeWindow”方法?

最佳答案

我的注释代码看起来像something这样。我没有测试,这是一个更好的主意。用代码更容易表达我的想法。

public void scaleContainer(Container c, double xFactor, double yFactor)
{
    Component[] eles = c.getComponents();
    for(int i = 0 ; i < eles.length ; i++)
    {
        eles[i].setBounds(new Rectangle(
             (int) eles[i].getX() * xFactor,
             (int) eles[i].getY() * yFactor,
             (int) eles[i].getWidth() * xFactor,
             (int) eles[i].getHeight() * yFactor))
        if(eles[i] instanceof Container)
        {
            if(((Container)eles[i]).getLayout() == null) //If the container has it's own layout, let it assign it's own components
                scaleContainer((Conatiner)eles[i], xFactor, yFactor);
        }
    }
}


如果要按固定数目的像素而不是因数缩放,则需要计算因数。该因子为1 + (extraWidth / previousWidth)(高度类似)

09-30 18:32