【问题标题】:How to make JComponent Global如何使 JComponent 全球化
【发布时间】:2014-09-19 08:59:56
【问题描述】:

我在一个方法中创建了一个 JLabel,我想访问它 在我的 ItemListener 中。如何使我的 JLabel “公共静态”?

public class MainTicketPrinter implements ItemListener{

    public static void main(String[] args) {
        new MainTicketPrinter().ticket();
    }

    public void ticket() {
        JLabel lblTicket= new JLabel("This is a Ticket");
        lblTicket.addItemListener(this);      
    }
    public void itemStateChanged(ItemEvent e) {
        lblTicket.setVisible(true);
    }
}

【问题讨论】:

  • 如果你只想这样做,你可以使用 public static JLabel lblTicket= new JLabel("This is a Ticket");在班级水平。但请先考虑您的设计。
  • 虽然@ThusithaThilinaDayaratne 的评论和Matthijs 的答案有您正在寻找的答案,但您实际上不需要在这种情况下使用公共静态,因为您是从ItemListener 本身访问它。如果您有两个 MainTicketPrinter,您可能会遇到该静态变量的麻烦。

标签: java jlabel public jcomponent


【解决方案1】:

这应该可行:

public class MainTicketPrinter implements ItemListener{
    public static JLabel lblTicket;

    public static void main(String[] args) {
        new MainTicketPrinter().ticket();
    }

    public void ticket() {
        lblTicket= new JLabel("This is a Ticket");
        lblTicket.addItemListener(this);    
    }

    public void itemStateChanged(ItemEvent e) {
        lblTicket.setVisible(true);
    }
}

编辑:我不确定,但也许可以通过调用的事件访问该项目?

【讨论】:

  • 哇,如果我有 200 多个 JComponent,那么在类级别上声明所有这些组件仍然是一种好习惯吗?
  • @user3458556 如果属于该类的所有对象共享该公共属性,则应在类级别声明某些内容,例如,如果您想打印具有相同颜色的所有票,那么如果在班级级别保持这种颜色是有意义的。 依赖于对象的任何其他属性都应该为每个对象单独声明,即没有static
  • 谢谢,这是非常有用的信息。但这会告诉我它不应该在班级级别声明,因为我只想要某个票的某个标签。但是,如果我在方法中声明它,我将无法在 itemListener 中访问它。有没有办法在 ticket() 方法中添加“itemStateChaged”?
  • @user3458556 我认为您对此感到困惑。实例变量属于一个对象,并且在没有static 关键字的情况下定义。为将从该类创建的每个对象定义一次类变量。将一种方法放在另一种中是不可能的。如果您仍需要 Java 基础知识方面的帮助,请参阅 docs.oracle.com/javase/tutorial/java/nutsandbolts/… 了解变量和 Java 程序员 1 对 Java 的温和介绍 docs.oracle.com/javase/tutorial/extra/certification/…
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 2010-11-18
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
相关资源
最近更新 更多