【问题标题】:what modifiers should I give a variable in this code example?在这个代码示例中我应该给一个变量什么修饰符?
【发布时间】:2012-07-19 23:44:24
【问题描述】:

在下面的代码示例中,我应该给变量label 提供什么修饰符? 我是 Java 新手,但我想做的第一件事就是分解出我可以在 swing 中使用的所有类,比如 JLabel 并制作它,以便我可以动态调用它们。我希望我在下面做到了。但是,是的,我不确定private static JLabel label;,因为最终我希望能够在某处的主文件中声明所有摇摆类。谢谢。

package base;

import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class CreateLabel extends JLabel {
    private static final long serialVersionUID = 1L;
    private static JLabel label;

    public Component createLabel(JFrame frame, String text) {
        label = new JLabel(text);
        return frame.getContentPane().add(label);
    }
}

【问题讨论】:

  • 如果您打算从另一个类初始化它,那么只公开和静态就可以了。您可以使用 setter 方法,但它相当没有意义。
  • 为什么CreateLabel 扩展JLabel?看起来您将继承与 Builder 模式混淆了
  • 我的第一个问题是为什么?你为什么要扩展 JLabel 来做到这一点?你打算创建一个工厂类吗?那么你会希望 createlabel 不扩展任何东西,是最终的,并且 createLabel 方法是静态的。理想情况下,您也永远不会引用它...
  • 为什么createLabel需要存储在CreateLabellabel中?
  • 忽略@tommo 的评论。除了常量之外,我在这里看不到任何应该是静态的。

标签: java swing modifiers


【解决方案1】:

我的理解是,你希望你的createLabel() 方法添加一个JLabel 来传递JFrame。你可以做的是:

public class LabelCreator /*extends JLabel*/ {
    /*private static final long serialVersionUID = 1L;*/
    /*private static JLabel label;*/

    public Component createLabel(JFrame frame, String text) {
        JLabel label = new JLabel(text);
        return frame/*.getContentPane()*/.add(label);
    }
}

注意更改类名以尊重命名约定。

【讨论】:

  • 谢谢你,这也很好。你为什么说将类名从 CreateLabel 更改为 LabelCreator 呢?谢谢。
  • @JoJo:因为类名应该是名词。方法应该是动词。另外,如果有效,您应该接受答案。
  • 我也不确定您为什么要将框架传递给 create 方法。这意味着标签总是被添加到内容窗格的中心,这几乎不是您真正想要的。
  • @JohnGardner:因为OP的方法就是这样。
  • @JoJo,是的。您正在混合几件事:控件的创建及其布局。我想你会想要在任何框架中放置多个控件...
猜你喜欢
  • 2017-09-29
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2021-08-12
  • 2021-08-12
  • 2020-02-07
  • 2012-07-28
相关资源
最近更新 更多