刚问了一次,基本明白了些,自己改了下,现在还有个问题不明白...
在文本框里 点10次 Enter 后 F1 会失效.....别的情况下都可以,就不明白这种怎么回事,想的头都炸了,估计还是和焦点有关系...
package guess;import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Guess extends JFrame {
private int guess;
private Container cn;
private int n; // 机会次数 private boolean gameOver; private JTextField tx = new JTextField(5); private JButton jb = new JButton("猜测"); private JLabel title = new JLabel("范围为0-500");
private JLabel life = new JLabel("还有10次机会"); private JLabel judge = new JLabel("------------------------"); private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JPanel panel3 = new JPanel();
private JPanel panel4 = new JPanel(); public Guess() { n = 10;
cn = this.getContentPane();
guess = new Random().nextInt(500); // 定制随即的范围 cn.add(panel1);
panel1.add(title);
panel1.add(life); cn.add(panel2);
panel2.add(new JLabel("输入猜测的数"));
panel2.add(tx); cn.add(panel3);
panel3.add(judge); cn.add(panel4);
panel4.add(jb); this.setLayout(new GridLayout(4, 1));
this.setVisible(true);
this.setSize(200, 180);
this.setLocation(300, 300);
//this.setFocusable(true); jb.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int i = Integer.valueOf(tx.getText());
if (!gameOver) {
if (i == guess) {
judge.setText("恭喜你 猜对了");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
} else if (i < guess) {
judge.setText("很遗憾 猜小了");
n--;
} else {
judge.setText("很遗憾 猜大了");
n--;
}
if(n==0) //没机会了
{
judge.setText("你太脑残了,GAMEOVER");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
}
life.setText("还有" + n + "次机会");
}
}
});
this.addKeyListener(new key());
tx.addKeyListener(new key());
jb.addKeyListener(new key());
} private class key extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_F1:
if (gameOver) {
guess = new Random().nextInt(1000);
jb.setEnabled(true);
tx.setEnabled(true);
n=10;
gameOver=false;
title.setText("范围为0-500,开始");
life.setText("还有" + n + "次机会");
judge.setText("------------------------");
}
break;
case KeyEvent.VK_ENTER:
if (!gameOver) {
int i = Integer.valueOf(tx.getText());
if (i == guess) {
judge.setText("恭喜你 猜对了");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
} else if (i < guess) {
judge.setText("很遗憾 猜小了");
n--;
} else {
judge.setText("很遗憾 猜大了");
n--;
}
if(n==0) //没机会了
{
judge.setText("你太脑残了,GAMEOVER");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
}
life.setText("还有" + n + "次机会");
break;
}
}
} } public static void main(String[] args) {
new Guess();
}
}
在文本框里 点10次 Enter 后 F1 会失效.....别的情况下都可以,就不明白这种怎么回事,想的头都炸了,估计还是和焦点有关系...
package guess;import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Guess extends JFrame {
private int guess;
private Container cn;
private int n; // 机会次数 private boolean gameOver; private JTextField tx = new JTextField(5); private JButton jb = new JButton("猜测"); private JLabel title = new JLabel("范围为0-500");
private JLabel life = new JLabel("还有10次机会"); private JLabel judge = new JLabel("------------------------"); private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JPanel panel3 = new JPanel();
private JPanel panel4 = new JPanel(); public Guess() { n = 10;
cn = this.getContentPane();
guess = new Random().nextInt(500); // 定制随即的范围 cn.add(panel1);
panel1.add(title);
panel1.add(life); cn.add(panel2);
panel2.add(new JLabel("输入猜测的数"));
panel2.add(tx); cn.add(panel3);
panel3.add(judge); cn.add(panel4);
panel4.add(jb); this.setLayout(new GridLayout(4, 1));
this.setVisible(true);
this.setSize(200, 180);
this.setLocation(300, 300);
//this.setFocusable(true); jb.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int i = Integer.valueOf(tx.getText());
if (!gameOver) {
if (i == guess) {
judge.setText("恭喜你 猜对了");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
} else if (i < guess) {
judge.setText("很遗憾 猜小了");
n--;
} else {
judge.setText("很遗憾 猜大了");
n--;
}
if(n==0) //没机会了
{
judge.setText("你太脑残了,GAMEOVER");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
}
life.setText("还有" + n + "次机会");
}
}
});
this.addKeyListener(new key());
tx.addKeyListener(new key());
jb.addKeyListener(new key());
} private class key extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_F1:
if (gameOver) {
guess = new Random().nextInt(1000);
jb.setEnabled(true);
tx.setEnabled(true);
n=10;
gameOver=false;
title.setText("范围为0-500,开始");
life.setText("还有" + n + "次机会");
judge.setText("------------------------");
}
break;
case KeyEvent.VK_ENTER:
if (!gameOver) {
int i = Integer.valueOf(tx.getText());
if (i == guess) {
judge.setText("恭喜你 猜对了");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
} else if (i < guess) {
judge.setText("很遗憾 猜小了");
n--;
} else {
judge.setText("很遗憾 猜大了");
n--;
}
if(n==0) //没机会了
{
judge.setText("你太脑残了,GAMEOVER");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
}
life.setText("还有" + n + "次机会");
break;
}
}
} } public static void main(String[] args) {
new Guess();
}
}
解决方案 »
- JAVA静态方法的解析问题
- StringBuilder里的数据如何用线程来处理
- ★★★★★对JNI熟悉的朋友请进来,请教一个在C++中调用Java的方法★★★★★
- 帮忙写个注释
- 导入了jar包 却不能找到其中的类
- 打砖块游戏,用java编写,如何让砖块消失和用循环绘制砖块,麻烦大家告诉我一下,我是新手
- 有人试过修改rt.jar里面的class文件吗?
- 现在有没有支持jdk1.5.0的开发工具(IDE)?
- 新人请教,用Swing的JPanel画图后,为什么不会刷新?
- [求助]用do…while编译的程序,为什么执行时提示这个错误信息
- 接触JAVA三年了,突然发现一个内部类的问题?求解
- 没有反映是为什么呢
另外,对输入没做判断,int i = Integer.valueOf(tx.getText());//如果输入的是非数字,会抛出异常
panel2.addKeyListener(new key());
panel3.addKeyListener(new key());
panel4.addKeyListener(new key());了,还是不行啊.....楼上的哥哥能改好 发个完整的吗```
static final int MAX_NUM = 500;
private int guess;
private Container cn;
private int n; // 机会次数 private boolean gameOver = false; private JTextField tx = new JTextField(5); private JButton jb = new JButton("猜测"); private JLabel title = new JLabel("范围为0-500");
private JLabel life = new JLabel("还有10次机会"); private JLabel judge = new JLabel("------------------------"); private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JPanel panel3 = new JPanel();
private JPanel panel4 = new JPanel();
public Guess() { n = 10;
cn = this.getContentPane();
guess = new Random().nextInt(MAX_NUM); // 定制随即的范围 cn.add(panel1);
panel1.add(title);
panel1.add(life); cn.add(panel2);
panel2.add(new JLabel("输入猜测的数"));
panel2.add(tx); cn.add(panel3);
panel3.add(judge); cn.add(panel4);
panel4.add(jb); this.setLayout(new GridLayout(4, 1));
this.setVisible(true);
this.setSize(200, 180);
this.setLocation(300, 300);
//this.setFocusable(true); jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (!gameOver) {
checkGuess();
}
});
//this.addKeyListener(new key());
//tx.addKeyListener(new key());
//jb.addKeyListener(new key());
setKeyListener(this, new key());
//resetGame();
} private class key extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_F1:
if (gameOver) {
resetGame();
}
break;
case KeyEvent.VK_ENTER:
if (!gameOver) {
checkGuess();
}
break;
}
}
} private void resetGame() {
guess = new Random().nextInt(MAX_NUM);
jb.setEnabled(true);
tx.setEnabled(true);
n=10;
gameOver=false;
title.setText("范围为0-500,开始");
life.setText("还有" + n + "次机会");
judge.setText("------------------------");
tx.requestFocus();
} private void checkGuess() {
int i = 0;
try {
int i = Integer.valueOf(tx.getText()).intValue();
} catch (Throwable e) {
judge.setText("请输入500以内的数字!");
return;
}
if (i == guess) {
judge.setText("恭喜你 猜对了");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
} else if (i < guess) {
judge.setText("很遗憾 猜小了");
n--;
} else {
judge.setText("很遗憾 猜大了");
n--;
}
if(n==0) {
judge.setText("你太脑残了,GAMEOVER");
title.setText("点击F1 重新开始");
gameOver=true;
tx.setEnabled(false);
jb.setEnabled(false);
this.requestFocus(); //have a try
}
life.setText("还有" + n + "次机会");
} private void setKeyListener(Container c, KeyAdapter ka) {
for (Component comp : c.getComponents()) {
comp.addKeyListener(ka);
if (comp instanceof Container) {
setKeyListener((Container)comp, ka);
}
}
}
}