Java swing避免重写jframe选项

Java swing避免重写jframe选项,java,swing,oop,Java,Swing,Oop,嗯,我的程序中有很多JFrames,我不想一直编写setSize()、setresizeable()、setVisible等等 所以我如何避免这样做,我不能扩展,因为我已经扩展了Jframe,我怎么能做到呢 提前感谢…创建YourCustomJframe并在其构造函数中设置所有内容,然后扩展它或只是创建它的实例一般来说,不鼓励扩展像JFrame这样的通用类,由于您没有向框架添加任何附加功能(您只是在配置它),您还可以将自己锁定在给定的实现中,从而降低组件的可重用性 你可以。。。 使用“工厂”模式

嗯,我的程序中有很多
JFrames
,我不想一直编写
setSize()、setresizeable()、setVisible等等

所以我如何避免这样做,我不能扩展,因为我已经扩展了Jframe,我怎么能做到呢


提前感谢…

创建
YourCustomJframe
并在其构造函数中设置所有内容,然后
扩展它或只是创建它的实例

一般来说,不鼓励扩展像
JFrame
这样的通用类,由于您没有向框架添加任何附加功能(您只是在配置它),您还可以将自己锁定在给定的实现中,从而降低组件的可重用性

你可以。。。 使用“工厂”模式生成一个实用程序类,它为您完成了工作

public class FrameFactory {
    public static JFrame createFrameWithTitle(String title) {
        JFrame frame = new JFrame(title);
        return frame;
    }

    public static JFrame createNonResizableFrameWithTitle(String title) {
        JFrame frame = createFrameWithTtitle(title);
        frame.setResizable(false);
        return frame;
    }
    //...
}
你可以。。。 使用“生成器”模式

public class FrameBuilder {

    private String title;
    private int closeOperation;
    private boolean resizable;

    public FrameBuilder() {
        closeOperation = JFrame.DISPOSE_ON_CLOSE;
        resizable = false;
    }

    public FrameBuilder setTitle(String title) {
        this.title = title;
        return this;
    }

    public FrameBuilder setDefaultCloseOperation(int op) {
        this.closeOperation = op;
        return this;
    }

    public FrameBuilder setResizable(boolean resizable) {
        this.resizable = resizable;
        return this;
    }

    public String getTitle() {
        return title;
    }

    public boolean isResizable() {
        return resizable;
    }

    public int getCloseOperation() {
        return closeOperation;
    }

    public JFrame build() {
        JFrame frame = new JFrame(getTitle());
        frame.setResizable(isResizable());
        frame.setDefaultCloseOperation(getCloseOperation());
        return frame;
    }

}
这将允许您定义一系列“通用”属性,这些属性可以通过一个或多个链接方法进行修改,以提供一定程度的自定义

JFrame frame = new FrameBuilder().
        setTitle("Test").
        setResizable(true).
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE).
        build();

嗯,第一个很有道理,但第二个我不明白创建它的实例是什么意思?
newyourcustomjframe()
通常不鼓励扩展
JFrame
,因为很多原因,最好使用工厂或构建器模式,而不是好奇,为什么不鼓励?是的,扩展并使用生成器声音better@JigarJoshi一般来说,您实际上并没有向类添加任何新功能,您只是提供了一个自定义配置,可以使用factory或builder模式来实现。这会将您锁定到一个特定的实现中,如果您知道要为一个有限的用例稍微更改它,您会提供另一个扩展还是单独配置该用例?如果你想换个窗口怎么办?扩展还将您锁定在一个实现中,限制了您潜在的重用(例如,将其移植到applet并不容易),这不是扩展JFrame的原因。在添加功能时,应该扩展类。类的Invoke方法没有添加功能。请告诉我们为什么有很多JFrames好吗?
我的程序中有很多JFrames,我不想编写setSize()、setResizeable()、setVisible等代码<代码>卡片布局
使用
JFrame.pack()
在卡片打开后switched@mKorbel我记得,切换卡后,
pack()
不会根据显示的面板调整大小。我记得
CardLayout
根据甲板上最大的面板调整框架的尺寸。虽然我不完全记得了,有一段时间没有亲自使用过它,而且目前还无法访问计算机。当我使用它时,我的画框大小像20,20。