从JPanel调整JFrame的大小

问题描述 投票:0回答:1

我很好奇,有一种方法可以从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();
    }
}
java swing jframe jpanel
1个回答
1
投票

对于您的自定义面板,最好覆盖[C​​0]方法。每个Swing组件都有责任了解其首选大小。

如果您希望将首选尺寸从400更改为600,则必须有这样做的理由。因此,您应该为面板提供一个可以修改的属性。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.