适当的OOP和java中类之间的灵活性

时间:2014-03-14 14:21:38

标签: java swing oop

我是java的新手,我想向您提供一些建议:

  • 我会在 setPreferredSize()中插入经理类的宽度和高度,而不使用“邪恶”静态,有人可以告诉我在这种情况下最聪明的事情是什么?

  • 是否可以在Manager类中不创建构造函数并传递宽度和高度,始终遵循OOP的灵活性类?

  • 我写错了添加(Panel.getPanel()),这是对的吗? 它尊重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;
       }

 }

1 个答案:

答案 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一样。很混乱。

oracle tutorials

中了解详情