0

我正在尝试制作一个刽子手游戏。我坚持尝试听击键。我希望用户能够按下一个键,它会测试它是否正确。我不想将它输入到文本框中,无论焦点如何,我都希望对该键进行测试。我尝试在面板中添加一个 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);
    }
}
  }
4

1 回答 1

0

如果我对您的理解正确,您希望此关键侦听器始终在任何地方工作。如果是这种情况,您可以按照 Swing 教程中的演示KeyListener所述,将自己的框架制作为自己的框架。

我知道它看起来需要一个文本框,但尝试将其添加为第 118 行:

displayArea.addKeyListener(this);
于 2011-04-04T22:46:15.823 回答