java中怎样为多个按钮设置监听

在设置布局的时候我用了for循环设置了9个按钮,但是这9个按钮是没有命名区别的,都是btn,我应该怎么给他们设置监听呢?达到的效果是当按下按钮之后按钮上的符号变反,代码如... 在设置布局的时候我用了for循环设置了9个按钮,但是这9个按钮是没有命名区别的,都是btn,我应该怎么给他们设置监听呢?达到的效果是当按下按钮之后按钮上的符号变反,代码如下:

import javax.swing.*;
import java.awt.*;
public class One{
public static void main(String[] args) {
JFrame f=new JFrame("JAVA小游戏");
//设置f布局管理器为3行3列,组件间水平和垂直间距都为2
f.setLayout( new GridLayout(3,3,2,2));
for(int i=0;i<9;i++){
if(i%2==0){
JButton btn=new JButton("+");
f.add(btn);
}
else{
JButton btn=new JButton("-");
f.add(btn);
}
}
f.setSize(300,200);
f.setVisible(true);
f.setResizable(false);
}
}
展开
 我来答
麦田守望者丶o
2014-08-12 · 超过25用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:61.3万
展开全部
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class One
{
    public static void main(String[] args)
    {
        JFrame f = new JFrame("JAVA小游戏");
        // 设置f布局管理器为3行3列,组件间水平和垂直间距都为2
        f.setLayout(new GridLayout(3, 3, 2, 2));
        for(int i = 0; i < 9; i++)
        {
            if(i % 2 == 0)
            {
                JButton btn = new JButton("+");
                btn.addMouseListener(new MouseMonitor(btn));
                f.add(btn);
            }
            else
            {
                JButton btn = new JButton("-");
                btn.addMouseListener(new MouseMonitor2(btn));
                f.add(btn);
            }
        }
        f.setSize(300, 200);
        f.setVisible(true);
        f.setResizable(false);
    }
    
    
}

class MouseMonitor extends MouseAdapter
{
    JButton jbt;
    public MouseMonitor(JButton x)
    {
        this.jbt = x;
    }
    public void mouseClicked(MouseEvent e)
    {
        jbt.setText("-");
    }
}

class MouseMonitor2 extends MouseAdapter
{
    JButton jbt;
    public MouseMonitor2(JButton x)
    {
        this.jbt = x;
    }
    public void mouseClicked(MouseEvent e)
    {
        jbt.setText("+");
    }
}

刚学的AWT,Swing没学,试了下,能达到效果。

追问

你的方法是可以实现的,但是我想了一下,你的代码还可以优化一下的:

btn.addMouseListener(new MouseMonitor(btn,false));


然后MouseMonitor和MouseMonitor2类可以合并的:

追答
嗯嗯,我也知道可以优化,但是不知道有getActionCommand()这个方法(还是看了slplele的答案才知道的),和楼主一样,同新手。。
root_u
2015-09-11 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:180
采纳率:100%
帮助的人:82万
展开全部
每一个按钮对应一个监听的方法。
多个就各自对应自己监听的方法。

如果是多个想对应一个只要把每一个按钮的监听的方法指向同一个监听方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wadeMhglv
2014-08-12 · TA获得超过1255个赞
知道小有建树答主
回答量:1478
采纳率:60%
帮助的人:671万
展开全部
for(int i=0;i<9;i++){
    JButton btn =null;
    if(i%2==0){
btn=new JButton("+");
f.add(btn);
    }
    else{
btn=new JButton("-");
f.add(btn);
    }
    btn.addActionListener(new ActionListener( ){
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand.equals("+")) {
                btn.setText("-");
            }
            else {
                btn.setText("+");
            }
        }
    });
}
更多追问追答
追问
你的代码有错,你可以运行一下看。
追答
这是我徒手打的代码,没有在编译器里面打,难免有疏漏,在e.getActionCommand后面少了(),这种错误属于编译时异常,你把这段代码放到eclipse里面的时候,就会提示错误,你也说了,但是这种芝麻点大的错误你都解决不了??eclipse的报错提示都不会读?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式