Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调整/缩放复杂的JFrame_Java_Jframe_Jfreechart - Fatal编程技术网

Java 如何调整/缩放复杂的JFrame

Java 如何调整/缩放复杂的JFrame,java,jframe,jfreechart,Java,Jframe,Jfreechart,我有一个复杂的JFrame。它在absoluteLayout中有一个主面板,它有按钮和标签,两个jFreeCharts,还有一个带有特定GridLayout的(子)面板,我用多个标签填充它 是否有调整/缩放整个内容的方法 pack() does not work because of the layout. 是否有一个更基本的“尺度——整个印度”方法?我不知道有什么方法可以按照您的要求来做,但更好的方法是使用函数将每个元素的宽度/高度设置为当前宽度/高度的百分比,这样您将始终得到相同的布局,而

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

是否有调整/缩放整个内容的方法

pack() does not work because of the layout.

是否有一个更基本的“尺度——整个印度”方法?

我不知道有什么方法可以按照您的要求来做,但更好的方法是使用函数将每个元素的宽度/高度设置为当前宽度/高度的百分比,这样您将始终得到相同的布局,而不是您要求的基本布局。

我的注释代码看起来很简单像这样的东西。我没有测试这个,这更多的是一个想法。更容易用代码表达我的想法

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);
        }
    }
}
public void scaleContainer(容器c、双xFactor、双yFactor)
{
组件[]eles=c.getComponents();
for(int i=0;i

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

您可以在jframe中的所有元素之间循环,将它们的位置值和大小值乘以某个系数。然后递归地对帧中的每个容器执行相同的操作。问题是,你会得到非整数。你可能想想想如何解决这个问题。最后,swing是基于布局的。你不应该真正使用绝对布局。不要使用绝对布局@但是如果我不使用AbsoluteLayout,我怎么能得到一个我想要的屏幕呢?请阅读上的Swing教程。别忘了你可以在每个面板上使用不同的布局管理器来实现你想要的布局。这对我来说很有希望。我如何知道帧大小在什么时候改变了多少?i、 当它变大时?你需要在框架内的面板上操作。不确定框架与收进边界的行为。无论如何。给定一个容器c,您可以执行
x=c.getWidth();scaleContainer(c,1.5,1.5);dx=c.getWidth()-x
您还应该意识到,这不会缩放标签的文本大小,因此调整标签大小后可能会显得笨拙。