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。