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

JAVA如何在运行时调整JFrame的大小?,java,swing,resize,jframe,Java,Swing,Resize,Jframe,如何从构造函数外部使用静态方法调整JFrame的大小 让我解释一下为什么我需要这个 我正在用Java编写一个类似塞尔达的游戏,我有一个地牢。在我的地牢里,有普通大小的房间,还有老板的房间。因此,我的问题是,由于老板室的尺寸与其他房间不同,是否可以在游戏后期调整我的JFrame?我直接在JFrame上绘图 我尝试使用setSize(int,int),但它只能用作非静态的 如果我问的不清楚,请告诉我 谢谢你的阅读 如何从构造函数外部使用 静态方法 将JFrame创建为局部变量,不要扩展JFrame

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

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

我正在用Java编写一个类似塞尔达的游戏,我有一个地牢。在我的地牢里,有普通大小的房间,还有老板的房间。因此,我的问题是,由于老板室的尺寸与其他房间不同,是否可以在游戏后期调整我的
JFrame
?我直接在
JFrame
上绘图

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

如果我问的不清楚,请告诉我

谢谢你的阅读

如何从构造函数外部使用 静态方法

  • 将JFrame创建为局部变量,不要扩展JFrame
所以我的问题是,是否有可能在稍后的时候调整JFrame的大小 游戏因为老板的房间的尺寸不同于其他的

  • 是的,我会选择preffer JFrame.pack(然后它的子对象返回正确的PreferredSize并由正确的LayoutManager放置)、over setSize(int,int)或setPreferredSize(new Dimension(int,int))以及JFrame.pack(),所有提到的三个选项在所有情况下都会在运行时起作用
我直接在JFrame上画画

  • 这是错误的决定,使用JPanel进行绘制,覆盖JFrame.pack()的JPanel getPreferredSize,然后JFrame和自定义绘制的所有坐标都基于getPreferredSize计算
我尝试使用setSize(int,int),但它只能用作非静态

  • 如果没有一个
如何从构造函数外部使用 静态方法

  • 将JFrame创建为局部变量,不要扩展JFrame
所以我的问题是,是否有可能在稍后的时候调整JFrame的大小 游戏因为老板的房间的尺寸不同于其他的

  • 是的,我会选择preffer JFrame.pack(然后它的子对象返回正确的PreferredSize并由正确的LayoutManager放置)、over setSize(int,int)或setPreferredSize(new Dimension(int,int))以及JFrame.pack(),所有提到的三个选项在所有情况下都会在运行时起作用
我直接在JFrame上画画

  • 这是错误的决定,使用JPanel进行绘制,覆盖JFrame.pack()的JPanel getPreferredSize,然后JFrame和自定义绘制的所有坐标都基于getPreferredSize计算
我尝试使用setSize(int,int),但它只能用作非静态

  • 如果没有一个
如果您想在静态上下文中使用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;
    }

    ....
}
如果您想在静态上下文中使用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;
    }

    ....
}

按照您所描述的方式,需要一个
静态关键字
,通常会指向错误的编程实践。请提供一个简短的可编译程序,它实际上解释了您的目标:-)按照您所描述的方式,需要一个
静态关键字
,通常会指向错误的编程实践。请提供一个简短的可编译程序,它实际上解释了您的目标:-)