繁体   English   中英

从 JPanel 调整 JFrame 的大小

[英]Resizing JFrame from JPanel

我很好奇有没有办法从JPanel object 调整 window 的大小。 我正在寻找解决方案一段时间。 也许我错过了什么?

我想在使用changeSize()方法时调整 window 的大小(按钮上的fe,我删除了批号)。

我尝试了不同的方法,例如setSizesetPreferredSizesetBorders

public class MAIN{
    public static void main(String[] args) {
         new Okno(new Panel_Saper());
    }
}

public class Okno extends JFrame{
    protected Okno(Panel panel) {
        setResizable(true);
        getContentPane();
        Container cp = getContentPane();
        cp.add(panel);
        pack();
        setDefaultCloseOperation(panel.getClose());//2 - JFrame.DISPOSE_ON_CLOSE, 3 - JFrame.EXIT_ON_CLOSE
        setVisible(true);
    }
}

public abstract class Panel extends JPanel {
    protected int getClose() {return 2;} //2 - JFrame.DISPOSE_ON_CLOSE
}//needed for override in other place

public class Panel_Saper extends Panel {
    Panel_Saper() {
        setLayout(null);
        setPreferredSize(new Dimension(400,400));   
    }

    public void changeSize() {//DOESN'T WORK
        SetSize(new Dimension(600,600));
        setBounds(0, 0, 600, 600);
        repaint();
    }
}

对于您的自定义面板,最好覆盖getPreferredSize()方法。 每个 Swing 组件负责了解其首选尺寸。

如果您想将首选大小从 400 更改为 600,您必须有这样做的理由。 因此,您应该有一个可以修改的面板属性。

然后,您的getPreferredSize()方法的实现将检查此属性并根据面板的当前 state 返回适当的大小。

我通过关闭并重新打开 window 来解决问题

现在您的组件已经正确实现了getPreferredSize() ,您可以在 JFrame 上简单地调用pack()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM