如何调整/缩放复杂的JFrame

时间:2013-10-10 16:48:52

标签: java jframe jfreechart

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

无论如何要重新调整/缩放整个事物吗?

pack() does not work because of the layout.

是否有更基本的“ScaleTheWholeWindow”方法?

2 个答案:

答案 0 :(得分:2)

我的评论代码看起来像这样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)(高度相似)

答案 1 :(得分:-1)

我不知道你要问的方法是什么,但更好的方法是将功能设置为将每个元素的宽度/高度设置为当前宽度/高度的百分比,这样你就可以获得相同的布局,而不是你要求的基本布局。