我正在尝试制作一个刽子手游戏。我坚持试图听取击键。我希望用户能够按一个键,它将测试是否正确。我不想将它输入到文本框中,无论焦点如何,我都希望对该单词进行测试。我试过在面板上添加一个keylistener,它不起作用。整个过程包括这个面板,一个左面板,一个主面板,然后是一个主框架。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class RightPanel extends JPanel
{
JLabel jlbMissed, jlbWord, jlbScore, jlbTimer;
JComboBox jcbDifficulty;
JButton jbtStart, jbtQuit;
String[] difficulties = {"Easy", "Medium", "Hard"};
String[] words = {"First", "Next", "Hello", "World"};
char incorrectChar, correctChar;
String word;
int currentScore;
boolean clockIsRunning = false;
boolean gameInPlay = false;
int sec = 0;
int min = 0;
public RightPanel()
{
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
ActionHandler actionHandler = new ActionHandler();
jlbMissed = new JLabel("Missed: " + incorrectChar);
jlbWord = new JLabel("Word: " + correctChar);
jlbScore = new JLabel("Score: " + currentScore);
jlbTimer = new JLabel("Time: " + "0:00");
jbtStart = new JButton("Start");
jbtQuit = new JButton("Quit");
jcbDifficulty = new JComboBox();
for (int i = 0; i < 3; i++)
{
jcbDifficulty.addItem(difficulties[i]); // Creates Difficutly ComboBox
}
this.add(jcbDifficulty, getConstraints(0,0,1,1, GridBagConstraints.NORTH));
this.add(jlbMissed, getConstraints(0,1,1,1, GridBagConstraints.CENTER));
this.add(jlbWord, getConstraints(0,2,1,1, GridBagConstraints.CENTER));
this.add(jlbScore, getConstraints(0,3,1,1, GridBagConstraints.CENTER));
this.add(jlbTimer, getConstraints(0,4,1,1, GridBagConstraints.CENTER));
this.add(jbtStart, getConstraints(0,6,1,1, GridBagConstraints.CENTER));
this.add(jbtQuit, getConstraints(1,6,1,1, GridBagConstraints.CENTER));
jbtStart.addActionListener(actionHandler);
jbtQuit.addActionListener(actionHandler);
Random ran = new Random(); //
int rand = ran.nextInt(4); // Generates random number then selects word from words array
word = words[rand]; //
KeyListener k = new KeyAdapter()
{
public void keyPressed(KeyEvent e) {System.out.println("key was pressed");}
};
this.addKeyListener(k);
}
private GridBagConstraints getConstraints(int gridx, int gridy, int gridwidth, int gridheight, int anchor)
{
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(5,5,5,5);
c.ipadx = 0;
c.ipady = 0;
c.gridx = gridx;
c.gridy = gridy;
c.gridwidth = gridwidth;
c.gridheight = gridheight;
c.anchor = anchor;
return c;
}
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source == jbtStart)
{
clockIsRunning = true;
MyTimer timer = new MyTimer();
timer.start();
gameInPlay = true;
}
else if (source == jbtQuit)
{
System.exit(0);
}
}
}
class MyTimer extends Thread
{
public void run()
{
while(true)
{
if(!clockIsRunning)
break;
try
{
Thread.sleep(1000);
}
catch (InterruptedException ecp)
{
}
if (sec == 59)
{
min++;
sec = 0;
}
else
sec++;
if(sec < 10)
jlbTimer.setText("Time:" + min+":0"+sec);
else
jlbTimer.setText("Time:" + min+":"+sec);
}
}
}
答案 0 :(得分:0)
如果我理解正确,你希望这个关键的听众随时随地都能工作。如果是这种情况,您可以按照this demo the Swing tutorial中{{3}}中的说明,将您的框架设为自己的KeyListener
。
我知道它看起来需要一个文本框,但尝试将其添加为第118行:
displayArea.addKeyListener(this);