我是Java的新手,正在尝试为我的程序弄清楚最后一件事。

这是我编写的程序,布局合理,完全没有问题。



现在,我的程序假设只要在键盘上按下它,就突出显示按钮(不要通过按下屏幕上的按钮)

我不确定我必须使用什么,因为它需要执行的操作是当他们在JTextArea中键入它时。我正在尝试将KeyEventKeyPressed一起使用,但不确定这样做是否正确,因为它实际上并不起作用。

我目前无法在此处发布代码,因为这是一项作业,并且我不希望我的一些同学去google并在他们在这里找到的情况下使用它。 (大声笑)

根据需要,这是我的代码:)

import javax.swing.*; // import all javax.swing
import java.awt.*; // import all java.awt
import java.awt.event.*;

public class Sample extends JFrame implements KeyListener { // start of the
                                                            // class

    private JTextArea field = new JTextArea(10,15); // create an instance of
                                                        // JTextField
    private JPanel mainPanel = new JPanel(); // create an instance of JPanel
    private JPanel TopFieldPan = new JPanel();
    private JPanel MainBtnsPan = new JPanel();
    private JPanel FifthRowPan = new JPanel();

    JPanel fifthBtn = new JPanel();

    private static JButton Space = new JButton("");

    public Sample() { // start of the weather constructor

        Space.setPreferredSize(new Dimension(280, 45));
        fifthBtn.add(Space);


        TopFieldPan.add(field);

        FifthRowPan.setLayout(new BoxLayout(FifthRowPan, BoxLayout.X_AXIS));
        FifthRowPan.add(fifthBtn);
        MainBtnsPan.setLayout(new GridLayout(5, 5, 0, 0));

        MainBtnsPan.add(FifthRowPan);

        mainPanel.add(TopFieldPan);
        mainPanel.add(MainBtnsPan);

        this.add(mainPanel);

        Space.setSelected(true);
        field.addKeyListener(this); // important !!!

        setTitle("Typing Tutor"); // set the title to the frame
        setSize(300, 300); // set the fixed size
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true); // make it visible

    } // ends of the constructor

    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            Space.setBackground(Color.green);

        }


    }

    public void keyReleased(KeyEvent evt) {
        Space.setBackground(null);
    }

    public void keyTyped(KeyEvent evt) {
        // TODO Auto-generated method stub

        if(evt.getKeyChar() == 'a' || evt.getKeyChar() ==  'A')
        {
            Space.setBackground(Color.green);
        }
        else if(evt.getKeyChar() == 'b' || evt.getKeyChar() == 'B')
        {
            Space.setBackground(Color.red);
        }
    }

    public static void main(String[] args) { // start of the main method

        new Sample();

    } // ends of main method

} // ends of class


我尽力简化了代码,这是最后一个。

因此,当我按aA时,它应该突出显示该空格JButton。

最佳答案

创建一个按钮和它们所映射的键的映射,如下所示:

Map<String, JButton> buttonMap = new HashMap<String, Button>();


然后,在添加按钮时,将它们添加到地图,如下所示:

buttonMap.put(FirstRow[i].toLowerCase(), btn);


然后,将以下内容添加到您的KeyTyped中:

public void keyTyped(KeyEvent evt) {
    String keyPressed = new String(""+evt.getKeyChar()).toLowerCase();
    JButton tmp = buttonMap.get(keyPressed);
    if(null != tmp){
        tmp.doClick();
    }
}


我很快对您的第1行和第2行的代码进行了处理。您必须对其进行处理才能使其适用于特殊键,但是它应该可以将您带到尝试的位置。

我将其粘贴在此处,以使答案保持较小。
http://pastebin.com/t1v8d6Hi

07-24 09:35