import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.lang.*;
public class Dazi extends KeyAdapter
{
static int j=(int)(Math.random()*1000)%26;;
static JFrame f=new JFrame("Heart欢迎您进入打字练习板块:");
static String str[]={"A","B","C","D","E","F","G","H","I","G","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
};
static JButton b[]=new JButton[str.length];
public Dazi()
{
f.setSize(600,600);
f.setLocation(50,50);
f.getContentPane().setLayout(new GridLayout(6,6));
loop();
}
public void loop()
{
for(int i=0;i<26;i++)
{
b[i]=new JButton(str[i]);
f.getContentPane().add(b[i]);
if(i!=j)
{
b[i].setVisible(false);
}
}
b[j].addKeyListener(this);
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==j+65)
{
b[j].setVisible(false);
System.out.println("Right!");
j=(int)(Math.random()*1000)%26;
loop();
}
else
System.out.println("Error!");
}
public static void main(String [] args)
{
Dazi d=new Dazi();
f.setVisible(true);
}
}
问题是:第一个字母显示时候按下对应键时候显示第二个字母,但是再按下对应键时候就不管事了 为什么?
import java.awt.*;
import javax.swing.*;
import java.lang.*;
public class Dazi extends KeyAdapter
{
static int j=(int)(Math.random()*1000)%26;;
static JFrame f=new JFrame("Heart欢迎您进入打字练习板块:");
static String str[]={"A","B","C","D","E","F","G","H","I","G","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
};
static JButton b[]=new JButton[str.length];
public Dazi()
{
f.setSize(600,600);
f.setLocation(50,50);
f.getContentPane().setLayout(new GridLayout(6,6));
loop();
}
public void loop()
{
for(int i=0;i<26;i++)
{
b[i]=new JButton(str[i]);
f.getContentPane().add(b[i]);
if(i!=j)
{
b[i].setVisible(false);
}
}
b[j].addKeyListener(this);
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==j+65)
{
b[j].setVisible(false);
System.out.println("Right!");
j=(int)(Math.random()*1000)%26;
loop();
}
else
System.out.println("Error!");
}
public static void main(String [] args)
{
Dazi d=new Dazi();
f.setVisible(true);
}
}
问题是:第一个字母显示时候按下对应键时候显示第二个字母,但是再按下对应键时候就不管事了 为什么?
解决方案 »
- 怎样隔一段时间后调用一个方法?这是我写的代码,希望大家指教,急用!
- 重新问一个,struts怎么制作复杂的表格?
- java截取右子串
- 让JScrollPane不响应键盘事件
- 用JDBC 批处理插入数据出错后不能回滚,数据库是mysql
- 环境问题,大家来帮帮忙~
- 简单问题 50分 JSP数据库连接
- 既然有了jbuilder,怎么还有人在弄什么jdk
- 请教--做过邮件系统的朋友,如何对qmail进行操作(100分,在线等候)
- nohup后台运行的程序运行一段时间以后会突然中断
- 用JDBC 连接数据库com.microsoft.jdbc.sqlserver.??问号的地方是数据库名还是表名!!!还用和JdbcOdbc一样在控制面板中进行连接吗???
- java组合键事件
但这样做没必要
{
for(int i=0;i <26;i++)
{
b[i]=new JButton(str[i]);
f.getContentPane().add(b[i]);
if(i!=j)
{
b[i].setVisible(false);
}
}
b[j].addKeyListener(this);
}
=====================================
每一次都loop,每一次都在frame上加上若干button,额的神呀。
聚焦也是有问题,顶6楼dracularking大大,学习
主要是没一次击键后,要让jbutton获得焦点,requestFocus()这个是要点import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.lang.*;public class Dazi extends KeyAdapter {
static int j = (int) (Math.random() * 1000) % 26;;
static JFrame f = new JFrame("Heart欢迎您进入打字练习板块:");
static String str[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "G",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z" };
static JButton b[] = new JButton[str.length]; public Dazi() { f.setSize(600, 600);
f.setLocation(50, 50);
f.getContentPane().setLayout(new GridLayout(6, 6));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initButtons();
} /**
* 这里只加载一次!!
* */
public void initButtons(){
for (int i = 0; i < 26; i++) {
b[i] = new JButton(str[i]);
f.getContentPane().add(b[i]);
// 暂时取消,全部显示看的更清楚
// if (i != j) {
// b[i].setVisible(false);
// }
}
j = (int) (Math.random() * 1000) % 26;
f.setVisible(true); // 移动到这里来
b[j].setBackground(new Color(255,0,255));
System.out.println(b[j].isFocusable());
b[j].addKeyListener(this);
b[j].requestFocus();
} public void loop() {
// for (int i = 0; i < 26; i++) {
// b[i] = new JButton(str[i]);
// f.getContentPane().add(b[i]);
// if (i != j) {
// b[i].setVisible(false);
// }
//
// }
for (int i = 0; i < 26; i++) {
b[i].setVisible(true);
}
System.out.println(str[j]);
b[j].setBackground(new Color(255,0,255)); // 增加一个颜色
b[j].addKeyListener(this);
b[j].requestFocus();
} public void keyPressed(KeyEvent e) { if (e.getKeyCode() == j + 65) {
b[j].setVisible(false);
b[j].setBackground(null); // 恢复原始颜色
System.out.println("Right!");
j = (int) (Math.random() * 1000) % 26;
loop();
} else
System.out.println("Error!");
} public static void main(String[] args) {
Dazi d = new Dazi();
}
}