用户将输入一个猜测,程序将检查它是否大于或小于随机生成的数字,然后再次循环直到guess ==数字。
gtf(猜测文本字段)是用户输入猜测的地方,而ttf(时间文本字段)是显示用户猜测的次数的地方。
问题是它只是跳过if语句(e.getSource()== gtf),它不等待用户在gtf中输入一个数字。你不能在actionPerformer中检查两次用户操作吗?我可以使用哪些其他解决方案?
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener{
private int number, guess;
private int time=0;
private int result;
private JButton btnStart;
private JTextField ttf, gtf;
private String msg;
//Constructor
public Test(){
ttf = new JTextField();
gtf = new JTextField();
btnStart = new JButton("Start");
btnStart.addActionListener(this);
gtf.addActionListener(this);
gtf.setEditable(false);
ttf.setEditable(false);
msg = ("Guess a number: ");
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.setLayout(new GridLayout(3, 2));
c.add(new JLabel("Click to start the test: ", JLabel.RIGHT));
c.add(btnStart);
JLabel msglabel = new JLabel(msg, JLabel.RIGHT);
msglabel.setForeground(Color.red);
c.add(msglabel);
c.add(gtf);
c.add(new JLabel("Number of guesses: ", JLabel.RIGHT));
c.add(ttf);
setSize(600, 100);
setTitle("Test");
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == btnStart){
gtf.setEditable(true);
btnStart.setEnabled(false);
Random generator = new Random();
number = generator.nextInt(99) + 1;
if (e.getSource() == gtf) {
String g = gtf.getName();
guess = Integer.parseInt(g);
while(time<=9)
{
time++;
ttf.setText(Integer.toString(time));
if(guess>number)
{
msg = (guess + "is too big. Try again: ");
}
else if(guess<number)
{
msg = (guess + " is too small. Try again: ");
}
else if (guess==number)
{
break;
}
}
result = (int) Math.ceil(time/3.0);
More code to print result...
答案 0 :(得分:2)
你不能在actionPerformer中检查两次用户操作吗?
不,Swing是基于事件的,因此只有一个组件可以触发ActionEvent
。这意味着您需要放置
if (e.getSource() == gtf) {
在if
语句的外层检查源组件(将按ENTER键触发)
答案 1 :(得分:0)
根本不需要if (e.getSource() == gtf)
语句,因为当用户单击按钮Start时开始检查输入,所以如果您传递此语句if (e.getSource() == btnStart)
,那么if (e.getSource() == gtf)
肯定会失败,所以只需删除它。