我有一个复杂的 JFrame。它在 absoluteLayout 中有一个主面板,其中有按钮和标签、几个 jFreeCharts 和一个带有特定 GridLayout 的第二个(子)面板,我用多个标签填充它。
反正有没有调整/缩放整个事情?
pack() does not work because of the layout.
是否有更基本的“ScaleTheWholeWindow”方法?
我有一个复杂的 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)
(和高度相似)
我不知道有什么方法可以按照您的要求进行操作,但是更好的方法是使用将每个元素的宽度/高度设置为当前宽度/高度的百分比的函数,这样您将始终得到相同的结果布局而不是您要求的基本布局。