Java Swing-TextArea.append未启动

Java Swing-TextArea.append未启动,java,swing,keylistener,keylogger,Java,Swing,Keylistener,Keylogger,正如标题所说。SwingtextArea未启动。我使用getter从mainKeyGUI类获取组件。在下面的代码中是“主类”: (是的,这是一种个人键盘记录器),无论如何,我也做了记录器类。将使用KeyListener检查按下的键: import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class Logger { KeyGUI keyGUIObject = new KeyGUI(); KeyLi

正如标题所说。Swing
textArea
未启动。我使用getter从main
KeyGUI
类获取组件。在下面的代码中是“主类”:

(是的,这是一种个人键盘记录器),无论如何,我也做了记录器类。将使用KeyListener检查按下的键:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Logger {

KeyGUI keyGUIObject = new KeyGUI();

KeyListener e = new KeyListener() {

    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
        case KeyEvent.VK_ESCAPE:
            System.out.println("Esc");
            keyGUIObject.getTextArea().append("Esc");
            break;
        case KeyEvent.VK_F1:
            System.out.println("F1");
            break;
        case KeyEvent.VK_F2:
            System.out.println("F2");
            break;
        case KeyEvent.VK_F3:
            System.out.println("F3");
            break;
        case KeyEvent.VK_F4:
            System.out.println("F4");
            break;
        case KeyEvent.VK_F5:
            System.out.print("F5");
            break;
        case KeyEvent.VK_F6:
            System.out.println("F6");
            break;
        case KeyEvent.VK_F7:
            System.out.println("F7");
            break;
        case KeyEvent.VK_F8:
            System.out.println("F8");
            break;
        case KeyEvent.VK_9:
            System.out.println("F9");
            break;
        case KeyEvent.VK_F10:
            System.out.println("F10");
            break;
        case KeyEvent.VK_F11:
            System.out.println("F11");
            break;
        case KeyEvent.VK_F12:
            System.out.println("F12");
            break;
        case KeyEvent.VK_PRINTSCREEN:
            System.out.println("Print Sc");
            break;
        case KeyEvent.VK_SCROLL_LOCK:
            System.out.println("Scr lock");
            break;
        case KeyEvent.VK_PAUSE:
            System.out.println("Pause");
            break;
        case KeyEvent.VK_INSERT:
            System.out.println("Insert");
            break;
        case KeyEvent.VK_DELETE:
            System.out.println("Delete");
            break;
        case KeyEvent.VK_PAGE_UP:
            System.out.println("PgUp");
            break;
        case KeyEvent.VK_PAGE_DOWN:
            System.out.print("PgDown");
            break;
        case KeyEvent.VK_DEAD_TILDE:
            System.out.println("Tilde");
            break;
        case KeyEvent.VK_1:
            System.out.println("1");
        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }

};

public KeyListener getE() {
    return e;
}

}
我制作了
System.out.println(“Esc”)
,以防它被触发。因为在控制台中,它确实显示Esc。所以我猜我注册了一些错误。

你的设计被关闭了

在main()方法中有以下代码:

KeyGUI keyGUIobj = new KeyGUI();
Logger loggerObj = new Logger();
在Logger类中,您有:

KeyGUI keyGUIObject = new KeyGUI();
因此,您正在创建同一类的多个实例

为了简化设计,您的
记录器
类应该
实现
键盘监听器
接口。这样就不需要getter/setter或对KeyGUI类的访问

然后在主类中,当您创建文本区域时,只需使用如下代码:

JTextArea textArea = new JTextArea(5, 10);
textArea.addKeyListener( new Logger() );

我建议您查看Swing教程中的部分,以获得工作示例和一些更好的结构化代码。

不要使用
KeyListener
,而是在
JTextArea
中添加一个。处理文档更新的一般建议很好,但DocumentListener不会处理OP试图处理的键。
JTextArea textArea = new JTextArea(5, 10);
textArea.addKeyListener( new Logger() );