【问题标题】:How to write actionlistener in java如何在java中编写actionlistener
【发布时间】:2013-09-10 17:58:03
【问题描述】:

以下是我的代码:

JLabel label1 = new JLabel("testcontent");
label1.setBounds(131, 57, 205, 74);

frame.getContentPane().add(label1);

JButton btn1 = new JButton("run");
btn1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    }
});

btn1.setBounds(169, 206, 117, 25);
frame.getContentPane().add(btn1);

当我尝试在 actionPerformed 中引用 label1 时,eclipse 找不到 label1。 谁能告诉我怎么了?

【问题讨论】:

    标签: java swing awt


    【解决方案1】:

    label1ActionListener 的范围内不可用。要么将其声明为final,要么将其设为类实例变量

    final JLabel label1 = new JLabel("testcontent");
    

    【讨论】:

    • 您没有将final 用作设计决策,而是将其用作解决方法——完全没有必要的解决方法。这是糟糕的编程。
    【解决方案2】:

    您可以通过执行this 答案中描述的操作来使用final

    基本上,您通过init 方法传入标签,您在创建匿名对象后立即调用该方法。在您的情况下,它看起来像这样:

    btn1.addActionListener(new ActionListener() {
        private JLabel myLabel;
        private ActionListener init(JLabel var){
            myLabel = var;
            return this;
        }
        public void actionPerformed(ActionEvent e) {
    
        }
    }.init(myVariable));
    

    然后可以在btn1actionPerformed 方法中访问引用myLabel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2012-10-16
      相关资源
      最近更新 更多