java - KeyEvent 不适用于 JTextArea,但适用于包含 JTextArea 的 JFrame

标签 java swing jtextarea keylistener

我寻找答案,但我发现的只是解决办法,而不是原因,所以我问这个问题:

我是 GUI 编程新手。在练习一些有关关键事件处理的代码时,我遇到了一个 JFrame 中包含 JTextArea 的示例。 keylistener接口(interface)由Frame本身实现。当按下某个键时,根据按下的键,一些相关信息会显示在文本区域上。代码运行良好。

但我尝试采取不同的方式,尝试将 JTextarea 注册到 keyListenr 而不是 JFrame。但是,这不会响应关键事件。这是下面的代码。请帮忙。

public class KeyDemoFrame extends JFrame
{
private String line1 = "";
private String line2 = "";
private String line3 = "";
private JTextArea textArea;

public KeyDemoFrame()
{
    super("Demonstrating Keystrong events");
    textArea = new JTextArea(10,21);
    textArea.setText("Press any key on keyboard");
    textArea.setEnabled(false);
    textArea.setDisabledTextColor(Color.BLACK);
    add(textArea);
    //addKeyListener( this );

    KeyEventHandler keyStrokeHandler = new KeyEventHandler();
    addKeyListener(keyStrokeHandler);
}   
    private class KeyEventHandler implements KeyListener
    {
        public void keyPressed(KeyEvent event)
        {
            line1 = String.format("Your pressed the %s key", KeyEvent.getKeyText(event.getKeyCode()));
            setLines2and3(event);

        }
        public void keyReleased(KeyEvent event)
        {
            line1 = String.format("You released %s key", KeyEvent.getKeyText(event.getKeyCode()));
            setLines2and3(event);
        }
        public void keyTyped(KeyEvent event)
        {
            line1 = String.format("You typed %s key",KeyEvent.getKeyText(event.getKeyCode()));
            setLines2and3(event);
        }
        private void setLines2and3(KeyEvent event)
        {
            line2 = String.format("This key is %san action key", (event.isActionKey()?"":"not "));
            String temp = KeyEvent.getKeyModifiersText( event.getModifiers() );
            line3 = String.format( "Modifier keys pressed: %s",( temp.equals( "" ) ? "none" : temp ) );
            textArea.setText( String.format( "%s\n%s\n%s\n",line1, line2, line3 ) );
        }
    }

}

import javax.swing.JFrame;

public class KeyDemo
{
public static void main(String[] args)
{
    KeyDemoFrame keyDemoFrame = new KeyDemoFrame();
    keyDemoFrame.setSize(300, 100);
    keyDemoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    keyDemoFrame.setVisible(true);
}
}

最佳答案

关于java - KeyEvent 不适用于 JTextArea,但适用于包含 JTextArea 的 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581985/

相关文章:

c# - ORM/如何处理Domain对象和Persistent对象的对应关系?

linux - 为什么从同一个 RPM 安装多个 Oracle JDK 二进制文件在不同的机器上不同?

java - KeyBindings 在 JApplet 中无法正常工作

java - 单击 GUI 时 JButton 消失

java - 如何限制 JTextArea 中的行数?

java - JTextArea 问题

Java - 从单独的类打开一个新 View

java - Jtable能有整体焦点吗?

java - 使 Jtextarea 能够被复制

java - SimpleDateFormat:不一致的模式字母