java循环按键循环监听事件

staticintcount;staticString[]a={"1a","2a","3a","4a","5a"};staticinti;staticJButton[]j... static int count;

static String [] a={"1a","2a","3a","4a","5a"};
static int i;
static JButton[] jbutton = new JButton[5];
static JLabel[] jlabel = new JLabel[jbutton.length];
public static void main(String[] args)
{
//创建窗口
JFrame j=new JFrame();
JPanel jpa = new JPanel();//定义面板组建
//final JLabel jlabel;//声明标签
for( i=0;i<jbutton.length;i++)
{
System.out.print(i);
jbutton[i] = new JButton(a[i]);//定义按钮组建
jpa.add(jbutton[i]);//将按钮添加到面板之中
jlabel[i] = new JLabel("您已点击"+a[i]+"的次数是:"+i);
jpa.add(jlabel[i]);
jbutton[i].addActionListener(new ActionListener()
{//事件处理,采用匿名内部类的形式
public void actionPerformed(ActionEvent e)
{//覆写处理的函数
count++;
jlabel[i].setText("您已点击"+a[i]+"的次数是:"+Buttoncall.count);
if(count%10==0)
{
JOptionPane.showMessageDialog(null, count+"是10的倍数,所以我来提示你!");
}
}
});
}
j.add(jpa);
j.setTitle("测试使用");
j.setVisible(true);
j.setSize(400,500);
}
}
展开
 我来答
zhaotao_king
推荐于2017-12-15 · TA获得超过2455个赞
知道大有可为答主
回答量:863
采纳率:0%
帮助的人:1132万
展开全部
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Buttoncall implements ActionListener {
private String[] a = {"1a", "2a", "3a", "4a", "5a" };
private JButton[] jbutton = new JButton[5];
private JLabel[] jlabel = new JLabel[jbutton.length];
//用于记录按钮的点击数
private Map&lt;String, Integer&gt; countMap = new HashMap&lt;String, Integer&gt;();
/**
* 创建一个新的实例 Buttoncall.
*/
public Buttoncall() {
// 创建窗口
JFrame j = new JFrame();
JPanel jpa = new JPanel();// 定义面板组建
/**
* 初始化按钮,及其点击次数(默认0)
*/
for (int i = 0; i &lt; jbutton.length; i++) {
jbutton[i] = new JButton(a[i]);// 定义按钮组建
jpa.add(jbutton[i]);// 将按钮添加到面板之中
jlabel[i] = new JLabel("您已点击" + a[i] + "的次数是:0");
jpa.add(jlabel[i]);
jbutton[i].addActionListener(this);
}
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.add(jpa);
j.setTitle("测试使用");
j.setVisible(true);
j.setSize(400, 500);
}
/**
* 单击事件处理.
* &lt;p&gt;Title: actionPerformed&lt;/p&gt;
* &lt;p&gt;Description: &lt;/p&gt;
* @param actionevent
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent actionevent) {
//获取单击事件组件 名称 如1a
String buttonName = actionevent.getActionCommand();
//在数组中的位置
int index = Arrays.asList(a).indexOf(buttonName);
if (index != -1) {
int count = 1;
//判断map中是否存在当前按钮
if (countMap.containsKey(buttonName)) {
count = countMap.get(buttonName);
count += 1;
}
//记录当前按钮点击次数
countMap.put(buttonName, count);
jlabel[index].setText("您已点击" + buttonName + "的次数是:" + count);
if (count % 10 == 0) {
JOptionPane.showMessageDialog(null, count + "是10的倍数,所以我来提示你!");
}
}
}

public static void main(String[] args) {
new Buttoncall();
}
}

你的这种写法不对,逻辑有问题!

匿名内部类调用的全局变量 i

所以每次点击的时候i的值都等于5,这时候就会数组越界!我给你写了个例子,你参考下!


有问题再追问,good luck!

更多追问追答
追问
谢谢,您这个我看一边把我的问题搞定了,就是有一点疑问private Map countMap = new HashMap();    您这个代码我直接复制到我的Eclipse里就报错 不知道为什么 一直没搞明白。请您在解答一下谢谢
追答
你看看你的JDK是什么版本的。
1.5以上的才支持泛型!
秒杀腹黑菟
2013-04-19 · TA获得超过502个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:68.5万
展开全部
不想调试了
仅就说一点,既然count是一个全局变量,你点这个按钮+1,点那个按钮也+1,那么jlabel[i].setText("您已点击"+a[i]+"的次数是:"+Buttoncall.count);这个能准确么...
追问
准不准是一回事  我想要他把代码执行下来 现在这段代码执行不下来报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式