wgf42422 2009-11-20 23:13
浏览 598
已采纳

addActionListener中如何使用外部变量?

for (int i = 0; i < 10; i++) {
BTN[i] = new JButton("" + i);
BTN[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField.setText(""+i); //这里会出错的
}
});

}

addActionListener中如何使用变量i?请直接贴代码...有代码+解释更好.3q
final int i;不行啊...还是会出错的..访问有问题.

  • 写回答

3条回答 默认 最新

  • rednaxelafx 2009-11-21 22:59
    关注

    final是可以的……只是不知道你有没有写对而已:
    [code="java"]import java.awt.event.*;
    import javax.swing.*;

    public class Demo {
    private static void populateGUI() {
    JFrame frame = new JFrame("Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    frame.add(panel);
    
    final JTextField field = new JTextField(5);
    panel.add(field);
    
    for (int i = 1; i <= 3; i++) {
      final int j = i;
      JButton button = new JButton(Integer.toString(i));
      button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          field.setText(Integer.toString(j));
        }
      });
      panel.add(button);
    }
    
    frame.pack();
    frame.setVisible(true);
    

    }

    public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    populateGUI();
    }
    });
    }
    }[/code]
    在这个ActionListener里用了两个局部变量,field和j,两个都必须声明为final。
    声明为final之后变量就不可修改了,如果要在匿名内部类里修改外部变量的值的话,还是把要改的值写为成员变量吧……或者重新评估一下是否真的需要在内部类里去修改外部变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型