1

我如何从构造函数外部使用resizea ?JFramestatic method

让我解释一下为什么我需要这个。

我正在用 Java 编写类似 Zelda 的游戏,并且我有一个地牢。在我的地牢里,有普通大小的房间,还有BOSS房间。所以我的问题是,JFrame由于 Boss 房间的尺寸与其他房间的尺寸不同,是否可以在游戏后期调整我的尺寸?我是直接画的JFrame

我尝试使用setSize(int,int),但它只能用作non-static.

请让我知道我的要求是否不清楚。

感谢您阅读

4

2 回答 2

4

如何从构造函数外部使用静态方法调整 JFrame 的大小?

  • 创建 JFrame 作为局部变量,不要扩展 JFrame

所以我的问题是,是否可以在游戏后期调整我的 JFrame 的大小,因为 Boss 房间的尺寸与其他房间的尺寸不同?

  • 是的,我更喜欢 JFrame.pack(然后它的孩子返回适当的 PreferredSize 并由适当的 LayoutManager 放置),超过 setSize(int,int)或 setPreferredSize(new Dimension(int,int))和 JFrame.pack(),所有提到的三个选项在所有情况下都适用于运行时

我直接在 JFrame 上绘图。

  • 这是错误的决定,使用 JPanel 进行绘画,为 JFrame.pack() 覆盖 JPanel getPreferredSize 然后根据 getPreferredSize 计算 JFrame 和自定义绘画的所有坐标

我尝试使用 setSize(int,int),但它只能用作非静态的。

于 2013-07-17T13:25:49.143 回答
0

如果你想在静态上下文中使用 setSize(int,int) 你应该做这样的事情

public class Main {

    static JFrame f;

    public static void main(String args[]) {
        f = new JFrame();
        f.add(new JLabel("prova"));
        f.setVisible(true);
        f.setSize(900, 900);
    }
}

通过将 JFrame 声明为静态,您可以在静态和非静态上下文中调用 setSize。

如果你想做的事

public class MyFrame extends JFrame() {

    public static void changeSize(int a, int b) {
        setSize(a,b);
    }

    ....
}

这是无法做到的,因为静态方法不能引用非静态对象(例如 MyFrame 类的当前实例。静态方法只能访问静态对象,例如

public class MyFrame extends JFrame() {

    static int l;

    public static void changeSize(int a, int b) {
        l = 10;
    }

    ....
}
于 2013-07-18T19:41:08.023 回答