JAVA如何在运行时调整JFrame的大小?

时间:2013-07-17 12:41:54

标签: java swing resize jframe

我如何从构造函数外部resize JFrame static method使用JFrame

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

我正在用Java编写类似Zelda的游戏,我有一个地下城。在我的地牢中,有正常大小的房间和老板房。所以我的问题是,由于Boss房间的尺寸与其他房间的尺寸不同,是否有可能在游戏后期JFrame调整尺寸?我直接在setSize(int,int)上绘图。

我尝试使用non-static,但它只能用作{{1}}。

如果我的要求不清楚,请告诉我。

感谢您阅读

2 个答案:

答案 0 :(得分:4)

  

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

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

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

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

我直接在JFrame上绘图。

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

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

答案 1 :(得分: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;
    }

    ....
}