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

解决方案 »

  1.   

     从匿名类中访问局部变量 i出错了吧,i应该为final的
    还有。,楼主的问题很抽象吖,那个textField有没有声明的吖?
      

  2.   

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

    }); } 
      

  3.   

    楼上的代码应该是按BTN几都是输出9的
    我需要的是按BTN1就输出1..BTN9才输出9
    final int i;不行啊...还是会出错的..访问有问题.
      

  4.   

    很明确的告诉你 这样做不行。 i必须为final,但是你 i++,是不行的了,因为final的后变量只能被赋值一次
      

  5.   

    setText
    public void setText(String t)将此文本组件显示的文本设置为指定文本。 
    你的变量i是整型数,可能要转化吧!
      

  6.   


    for (int i = 0; i < 10; i++) {
    final buttonIndex = i;
    BTN[buttonIndex] = new JButton("" + buttonIndex);
    BTN[buttonIndex].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    textField.setText(""+buttonIndex);
    }
    });
    }
      

  7.   

    package otherExercise;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class jFrameTest extends JFrame 
    {
    private JButton[] BTN=new JButton[10];
    private JTextField textField=new JTextField(10);
    public jFrameTest()
    {
    super.setSize(400,300);
    Container c=getContentPane();
    c.setLayout(new FlowLayout());

    for (int i = 0; i < 10; i++) { 
    BTN[i] = new JButton(""+i); 
    BTN[i].addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) {
    for(int i=0;i<=10;i++)
    {
    textField.setText(" a");
    }

    });  }
    for(int i=0;i<10;i++)
    c.add(BTN[i]);
    c.add(textField);
    super.setVisible(true);
    }
    public static void main(String args[])
    {
    jFrameTest test=new jFrameTest();
    test.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }}
      

  8.   

    package otherExercise;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class jFrameTest extends JFrame 
    {
    private JButton[] BTN=new JButton[10];
    private JTextField textField=new JTextField(10);
    private int k=0;
    public jFrameTest()
    {
    super.setSize(400,300);
    Container c=getContentPane();
    c.setLayout(new FlowLayout());

    for (int i = 0; i < 10; i++) { 
    BTN[i] = new JButton(""+i); 
    BTN[i].addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) {

    textField.setText("this is butten: "+(k++));

    });  }
    for(int j=0;j<10;j++)
    c.add(BTN[j]);
    c.add(textField);
    super.setVisible(true);
    }
    public static void main(String args[])
    {
    jFrameTest test=new jFrameTest();
    test.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }}
    /*你试试这个吧!但是里面有些漏洞!我也想不出什么好的办法!想起来我再发给你*/