java JButton 改变按钮文字

for(inti=0;i<B.length;i++){for(intj=0;j<B[i].length;j++){B[i][j]=newJButton();B[i][j]... for(int i = 0; i < B.length; i++){
for(int j = 0; j < B[i].length; j++){
B[i][j] = new JButton();
B[i][j].setBounds(200 * i , 200 * j + 60 , 200 , 200);
B[i][j].setFont(new Font("", Font.BOLD, 150));

B[i][j].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent changeButton){
B[0][0].setText("O");
gameState[0][0] = 'O';
}
});
}
}
有字数限制,所以描述一下:
B 的定义: JButton[][] B = new JButton[3][3];
gameState是一个3x3的char数组。
我想给这9个按钮增加点击的动作,就是点击一个按钮就使按钮上面的文字变为 O,但ActionEvent那里不让我写B[i][j].setText("O");,所以只能手动一个一个加动作吗?
展开
 我来答
cucaracha
推荐于2018-03-28 · 超过54用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:100%
帮助的人:76万
展开全部

因为 i 和 j 是局部变量,在内部类中不允许访问局部变量,如果要访问必须添加 final。所以有个折中的办法,再声明两个中间变量,并定义为 final 类型的,你在内部类中访问这两个中间变量就行了。代码样例:

    for(int i = 0; i < B.length; i++){            
        for(int j = 0; j < B[i].length; j++){                
        B[i][j] = new JButton();                
        B[i][j].setBounds(200 * i , 200 * j + 60 , 200 , 200);                
        B[i][j].setFont(new Font("", Font.BOLD, 150));                
                
        final a = i; // 中间变量
        final b = j; // 中间变量
        B[a][b].addActionListener(new ActionListener(){                  
            @Override                  
            public void actionPerformed(ActionEvent changeButton){                    
                B[a][b].setText("O");                    
                gameState[a][b] = 'O';                  
            }                
        });            
        }        
    }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式