【问题标题】:proper OOP and flexibility between classes in javajava中类之间的正确OOP和灵活性
【发布时间】:2014-03-14 14:21:37
【问题描述】:

我是java新手,想听听你的建议:

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

  • 是否可以不在管理器类中创建构造函数并始终按照 OOP 的灵活性类传递宽度和高度?

  • 我写错了add(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) Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?。 2) 扩展JPanelJFrame 是否有理由不添加功能,3) 在java 方法中,名称以小写字母开头,按照惯例采用驼峰式风格。 4) Manager 中的变量可能是final
  • @nachokk 请告诉我什么方法不遵循 java 约定?我的程序中的所有方法都遵循驼峰式约定,例如:getHeight(),无论如何,在面板中我添加了一个 keylistener 和 mouselistener,框架具有启动应用程序的功能,因为您可以看到它有一个 main 方法。
  • 这个问题可能更适合codereview.stackexchange.com

标签: java swing oop


【解决方案1】:

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

阅读此内容,应该对Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? 有所帮助。一般来说,让布局管理器来领导。

是否可以不在管理器类中创建构造函数并通过 宽度和高度总是尊重 OOP 的灵活性等级?

是的,让它们成为类变量(static)和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;
   }
 }

}

add(Panel.getPanel()) 写错了,对吗?它尊重 面向对象?

不,除非getPanel() 是一个静态 方法,否则它是不正确的。您应该创建一个 JPanel 的实例

 JPanel panel = new Panel();
 add(panel);

您还以一种不好的方式使用继承。您正在子类化,但您没有添加任何新功能,如果您决定子类化,请不要使用Panel,因为它的名称就像java.awt.Panel,非常令人困惑。

阅读更多oracle tutorials

【讨论】:

  • 我很高兴,我的反应非常线性:D
  • 我没有粘贴我所有的代码,我的兴趣在于你解释得很好,我在面板中添加了监听器。
猜你喜欢
  • 2015-03-25
  • 2012-12-20
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2015-08-24
  • 1970-01-01
相关资源
最近更新 更多