永发信息网

java循环按键循环监听事件

答案:2  悬赏:40  手机版
解决时间 2021-02-20 03:25
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);
}
}
最佳答案
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;();

public Buttoncall() {
// 创建窗口
JFrame j = new JFrame();
JPanel jpa = new JPanel();// 定义面板组建

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);
}

@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!
全部回答
不想调试了 仅就说一点,既然count是一个全局变量,你点这个按钮+1,点那个按钮也+1,那么jlabel[i].setText("您已点击"+a[i]+"的次数是:"+Buttoncall.count);这个能准确么...
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
南宫一中15年有没有人考上清华
中国妇女 造句中国妇女 造句
清合跆拳道馆在什么地方啊,我要过去处理事情
填写票据和结算凭证时下列中文大写不正确的是
我昨天下午感冒了英文的过去式
前往世界的尽头主题曲歌曲叫什么是谁唱的
什么桃子最好?
夏至未至中提到的那首歌。是怎么
新颖美发美容地址有知道的么?有点事想过去
怎么制作简历啊?简历包括什么才完整
恶魔在身边属于什么类型的电视剧
魅族MX4pro更新固件!导致手机开不了机!然后
路德通驾校这个地址在什么地方,我要处理点事
单选题下列两组句子,衔接最好的句子是①在有
【近水楼台先得月下一句】近水楼台先得月()下
推荐资讯
累德村地址有知道的么?有点事想过去
红米4x返回键怎么设置
异路乘凤什么意思? 10分
南通农商银行东社支行怎么去啊,有知道地址的
ATI HD5730和英伟达GT325m显卡 哪个好 差多少
帝颛顼怎么读
五星桥地址在什么地方,我要处理点事!
如果一个人被拘留了,有人去看他,拘留所会不
中国人在马来西亚被扣怎么办
营口哪个驾校比较好?
超级经典老歌
笔记本玩逆战卡怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?