Java Swing JTextArea镜像

tau*_*mui 0 java user-interface swing keylistener jtextarea

我创建了一个具有两个JTextAreas的用户界面.我想要一个文本区域来接收用户的直接输入,然后我会基本上喜欢另一个完全镜像它.所以这意味着除了添加完全相同的字符,它还正确地匹配退格并返回按键等.我试图通过使用Robot(int keycode)函数模拟退格并返回按键来实现这一点,给它右键码10为Enter,8为Backspace.如果它是常规字符,那么我只需将它附加到第二个JTextArea.这适用于字符并返回按键,但按Backspace只会将未知字符矩形绘制到镜像文本区域.

在此输入图像描述

理想情况下,我希望能够直接将输入JTextArea中发生的事件传递给输出JTextArea,而不是自己手动计算出适当的行为.

这是程序的一部分,它创建输入JTextArea并分配一个keylistener:

inputBox = new JTextArea();
    inputBoxScroller = new JScrollPane();
    inputBoxScroller.setViewportView(inputBox);
    inputBox.addKeyListener(this);
Run Code Online (Sandbox Code Playgroud)

这是程序的一部分,它接收keylisten事件并根据按下的键的键代码计算出要做的事情,我希望将其改为以某种方式将keylisten事件"转发"到输出JTextArea,因为这样做更理想.

public void keyTyped(KeyEvent keyevent) {
    String keyPressed = String.valueOf(keyevent.getKeyChar());
    int keyCode = keyevent.getKeyCode();

    if(keyCode == 10) {
        try {
            System.out.println(keyevent.toString());
            autoKeypresser = new Robot();
            outputBox.requestFocus();
            autoKeypresser.keyPress(10);
            inputBox.requestFocus();
        } catch (AWTException e) {
            e.printStackTrace();
        }
    } 

    if(keyCode == 8) {
        try {
            autoKeypresser = new Robot();
            outputBox.requestFocus();
            autoKeypresser.keyPress(8);
            inputBox.requestFocus();
        } catch (AWTException e) {
            e.printStackTrace();
        }
    } else {
        outputBox.append(keyPressed);
    }
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 5

然后我会基本上喜欢另一个完全镜像它

您需要做的就是分享模型:

JTextArea textArea1 = new JTextArea(...);
JTextArea textArea2 = new JTextArea();
textArea2.setDocument( textArea1.getDocument() );
Run Code Online (Sandbox Code Playgroud)

现在,无论您在任何文本区域中键入内容,都将反映在两个文本区域中.