Как создать пользовательский компонент без дополнительного метода в Java? - PullRequest
2 голосов
/ 13 июня 2019

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

посмотрите мой код, пожалуйста

class  CustomLabel {

        private  JLabel customLabel;

         public  CustomLabel() {
                createLabel();
         }

         private  void createLabel() {
                customLabel = new JLabel("Label test");
         }

         /*
           i do not want to return this                 
          */
          public JLabel getLabel() {
                  return customLabel;
          }

}

class  Booter {

        /*
            calling customLabel
          */
         void createUI() {
                CustomLabel customLabel = new CustomLabel();

                 JPanel jPanel = new JPanel();

                 // this is not working
                 jPanel.add(customLabel);
                 // but if i call extra method that inside customLabel
                 // it works fine but i do not want it
                 jPanel.add(customLabel.getLabel());
                 //i need to do same like java defined component like.
                 JLabel label = new JLabel("Test2");
                 jPanel.add(label); // its is not required getLabel or others
           }
}

Ответы [ 3 ]

2 голосов
/ 13 июня 2019

Почему бы вам просто не расширить JLabel

class  CustomLabel extends JLabel {
  public CustomLabel() {
    super("Label test");
  }
}

class  Booter{

                   /*
                   calling customLabel
                   */
                   void createUI(){
                       jPanel.add(new CustomLabel());


                   }
               }
1 голос
/ 13 июня 2019

Вы можете расширить класс JLabel, если хотите создать его напрямую, используя его конструктор:

import javax.swing.JLabel;

public class CustomLabel extends JLabel {

    public CustomLabel(String text) {
        super(text);
    }
}

А затем в своем коде вызова вы можете сделать это:

class Booter {

    void createUI() {
        CustomLabel customLabel = new CustomLabel("TEST TEXT");

        JPanel jPanel = new JPanel();
        JLabel label = new JLabel("Test2");
        jPanel.add(customLabel);
        jPanel.add(label);
    }
}
0 голосов
/ 13 июня 2019

Нет ничего плохого в использовании getLabel (). Вы не можете напрямую добавить customLabel, как вы хотите в своем коде, потому что customLabel не является компонентом - это объект, который содержит компонент. Вот почему он работает с getLabel (), потому что этот метод возвращает только компонент JLabel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...