从JPanel调整JFrame的大小



我很好奇有没有一种方法可以从JPanel对象调整窗口大小。我正在寻找解决方案一段时间。也许我错过了什么?

当使用changeSize()方法时,我想调整窗口的大小(例如,在按钮上,我删除了批次代码(。

我尝试过不同的方法,如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()方法的实现将检查此属性,并根据面板的当前状态返回适当的大小。

我通过关闭和重新打开窗口来解决问题

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

最新更新