从 JPanel 调整 JFrame 的大小
Resizing JFrame from JPanel
我很好奇有没有办法从 JPanel
对象调整 window 的大小。我正在寻找解决方案一段时间。也许我遗漏了什么?
我想在使用 changeSize()
方法时调整 window 的大小(f.e。在按钮上,我删除了批号)。
我尝试了不同的方法,例如 setSize
、setPreferredSize
和 setBorders
。
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()
方法的实施将根据面板的当前状态检查此 属性 和 return 适当的大小。
I made work around by closing and reopening window
现在您的组件已经正确实现了 getPreferredSize()
,您可以简单地在 JFrame 上调用 pack()
。
我很好奇有没有办法从 JPanel
对象调整 window 的大小。我正在寻找解决方案一段时间。也许我遗漏了什么?
我想在使用 changeSize()
方法时调整 window 的大小(f.e。在按钮上,我删除了批号)。
我尝试了不同的方法,例如 setSize
、setPreferredSize
和 setBorders
。
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()
方法的实施将根据面板的当前状态检查此 属性 和 return 适当的大小。
I made work around by closing and reopening window
现在您的组件已经正确实现了 getPreferredSize()
,您可以简单地在 JFrame 上调用 pack()
。