Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java编写actionlistener_Java_Swing_Awt - Fatal编程技术网

如何用java编写actionlistener

如何用java编写actionlistener,java,swing,awt,Java,Swing,Awt,以下是我的密码: 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

以下是我的密码:

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。 任何人都可以告诉我出了什么问题?

label1在ActionListener的范围内不可用。要么将其声明为final,要么将其作为类实例变量

final JLabel label1 = new JLabel("testcontent");
label1在ActionListener的范围内不可用。要么将其声明为final,要么将其作为类实例变量

final JLabel label1 = new JLabel("testcontent");
您可以按照答案中的描述使用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));
然后可以在btn1的actionPerformedmethod中访问参考myLabel。

您可以按照答案中的描述使用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));
然后,可以在btn1的actionPerformedmethod中访问参考myLabel。

您不是将final用作设计决策,而是将其用作一种变通方法—一种完全不必要的变通方法。这是一个糟糕的编程。你没有使用final作为设计决策,而是作为一种变通方法——一种完全不必要的变通方法。这是糟糕的编程。