我是java的新手,我想向您提供一些建议:
我会在 setPreferredSize()中插入经理类的宽度和高度,而不使用“邪恶”静态,有人可以告诉我在这种情况下最聪明的事情是什么?
是否可以在Manager类中不创建构造函数并传递宽度和高度,始终遵循OOP的灵活性类?
告诉我这段代码在哪里错了或修复了什么,我想学习,谢谢你。
public class MainFrame extends JFrame {
public static void main(String[] args) {
final MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
}
public MainFrame() {
initFrame();
}
private void initFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(Panel.getPanel());
setResizable(false);
setUndecorated(true);
pack();
setLocationRelativeTo(null);
}
}
public class Panel extends JPanel {
public Panel() {
setPreferredSize(new Dimension(/*?????????*/));
}
}
public class Manager {
private int width = 700;
private int height = 700;
// Some unrelated code follows
public int getHeight(){
return height;
}
public int getWidth(){
return width;
}
}
答案 0 :(得分:3)
我会在setPreferredSize()中插入宽度和高度 经理班,没有使用" evil"静力学,有人能告诉我 在这种情况下最明智的做法是什么?
阅读本文,应该有所帮助Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?。一般情况下,让布局管理器以此为主导。
是否可以不在manager类中创建构造函数并传递 宽度和高度总是尊重OOP的灵活性等级?
是的,让他们成为类变量(静态)和final
,这意味着
选项1
//check class name
public class Manager {
public static final int width = 700;
public static final int height = 700;
}
选项2,
public class Manager {
private static int width = 700; //could be final
private static int height = 700; // could be final
// Some unrelated code follows
public static int getHeight(){
//you can make some algorithm in this way
return height;
}
public static int getWidth(){
//you can make some algorithm in this way
return width;
}
}
选项3:定义枚举
public class Manager {
public enum Dimension{
WIDTH(700),
HEIGHT(700);
private final Integer value;
Dimension(Integer value){
this.value=value;
}
public Integer getValue(){
return value;
}
}
}
我写错了(Panel.getPanel()),这是对的吗?它尊重 OOP?
不,除非getPanel()
是静态方法,否则它不正确。您应该创建JPanel
JPanel panel = new Panel();
add(panel);
此外,您正在以糟糕的方式使用继承。你是子类,但你没有添加任何新功能,如果你决定继承,请不要使用Panel
,因为它的名字就像java.awt.Panel
一样。很混乱。