如何用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作为设计决策,而是作为一种变通方法——一种完全不必要的变通方法。这是糟糕的编程。