0

我是 Java 新手,并试图为我的程序找出最后一件事。

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

在此处输入图像描述

现在我的程序假设在键盘上按下按钮时突出显示按钮(而不是通过按下屏幕上的按钮)

我不确定我必须使用什么,因为它需要采取的操作是当他们在JTextArea. 我正在尝试使用KeyEventwithKeyPressed但不确定这是否正确,因为它并没有真正起作用。

我现在不能在这里发布我的代码,因为这是一个作业,我不希望我的一些同学在谷歌上搜索并使用它,如果他们在这里找到它。(哈哈)

这里需要的是我的代码:)

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

我试图尽可能地简化代码,这是最后一个。

所以当我按下它时,我试图做到这一点,a或者A它应该突出显示那个空间 JButton。

4

2 回答 2

2

创建您的按钮及其映射到的键的映射,如下所示:

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

于 2013-03-26T00:08:57.137 回答
1

你的代码看起来不错,你似乎有一个与 KeyListener 一起工作的基本机制。您可能需要考虑如何停止鼠标单击按钮,JButton.setEnabled(false) 有效,但会更改按钮的绘制方式,因此您可能需要覆盖paint方法。您可能只需要将 keylistener 连接到一个组件,窗口将获取所有事件,即当它具有焦点时的文本区域。您的主要任务是弄清楚如何将按键事件映射到按钮,也许使用哈希图或其他东西来存储 JButtons,键是字符代码?

于 2013-03-25T23:57:07.750 回答