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);
}
}
java循环按键循环监听事件
答案:2 悬赏:40 手机版
解决时间 2021-02-20 03:25
- 提问者网友:且恨且铭记
- 2021-02-19 14:59
最佳答案
- 五星知识达人网友:狂恋
- 2021-02-19 15:23
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<String, Integer> countMap = new HashMap<String, Integer>();
public Buttoncall() {
// 创建窗口
JFrame j = new JFrame();
JPanel jpa = new JPanel();// 定义面板组建
for (int i = 0; i < 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!
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<String, Integer> countMap = new HashMap<String, Integer>();
public Buttoncall() {
// 创建窗口
JFrame j = new JFrame();
JPanel jpa = new JPanel();// 定义面板组建
for (int i = 0; i < 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!
全部回答
- 1楼网友:旧脸谱
- 2021-02-19 16:34
不想调试了
仅就说一点,既然count是一个全局变量,你点这个按钮+1,点那个按钮也+1,那么jlabel[i].setText("您已点击"+a[i]+"的次数是:"+Buttoncall.count);这个能准确么...
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯