如何在Java中创建没有额外方法的自定义组件?

时间:2019-06-13 20:19:26

标签: java swing

我为Labels创建了自定义类,它可以正常工作,但我想要的是。 每当我从该类创建实例时,都必须创建标签而无需额外的可返回方法。

请看我的代码

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 个答案:

答案 0 :(得分:2)

为什么不扩展JLabel

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

class  Booter{

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


                   }
               }

答案 1 :(得分:1)

如果要使用其构造函数直接创建类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);
    }
}

答案 2 :(得分:0)

使用getLabel()没错。您不能直接在代码中随意添加customLabel,因为customLabel不是组件-它是包含组件的对象。这就是它与getLabel()一起工作的原因,因为该方法仅返回JLabel组件。