правильный ООП и гибкость между классами в Java

1

Я новичок в java, я хотел бы получить от вас некоторые советы:

  • Я бы ввел в setPreferredSize() ширину и высоту класса менеджера, не используя "злую" статику, может ли кто-нибудь сказать мне самую умную вещь в этом случае?

  • возможно ли создать конструктор в классе менеджера и передать ширину и высоту, всегда соблюдая классы гибкости ООП?

  • Я был неправ, чтобы написать add (Panel.getPanel()), это правильно? он уважает ООП?

Скажите мне, где я ошибаюсь в этом коде или что исправить, я хочу узнать, спасибо вам.

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;
       }

 }
Теги:
oop
swing

1 ответ

3
Лучший ответ

Я бы ввел в setPreferredSize() ширину и высоту класса менеджера, не используя "злую" статику, может ли кто-нибудь сказать мне самую умную вещь в этом случае?

Прочтите это, следует помочь. Должен ли я избегать использования методов set (Preferred | Maximum | Minimum) в Java Swing? , В общем, пусть макет-менеджер ведет с этим.

возможно ли создать конструктор в классе менеджера и передать ширину и высоту, всегда соблюдая классы гибкости ООП?

Да, сделайте их переменной класса (статичной), а также 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 и это очень запутанно.

Подробнее в учебниках оракула

  • 0
    Я так счастлив, я отвечаю очень линейно: D
  • 0
    Я не вставляю весь свой код, мой интерес был к этому, что вы хорошо объяснили, я добавил слушателей на панель.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню