2013-10-14 261 views
0

我製作了一個擁有兩個JTextAreas的用戶界面。我希望一個文本區域能夠接收來自用戶的直接輸入,然後我基本上會喜歡另一個文本區域來精確地對其進行鏡像。所以這意味着以及具有完全相同的字符添加到它,它也正確地匹配退格鍵和返回鍵按等我試圖通過模擬退格和返回按鍵使用機器人(INT鍵碼)功能實現這一點,給它右鍵10是Enter,8是Backspace。如果它是一個常規字符,那麼我只需將它附加到第二個JTextArea。這適用於字符和返回按鍵,但按Backspace只是將未知字符矩形繪製到鏡像文本區域。Java Swing JTextArea鏡像

enter image description here

我非常希望能夠直接傳遞發生在輸入的JTextArea傳至輸出JTextArea中而不是手動制定適當的行爲自己的事件。

這是程序的一部分,它創建了輸入的JTextArea和分配的KeyListener:

inputBox = new JTextArea(); 
    inputBoxScroller = new JScrollPane(); 
    inputBoxScroller.setViewportView(inputBox); 
    inputBox.addKeyListener(this); 

這是臨危的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); 
    } 
} 

回答

5

然後,我會基本上和另一個鏡像它到底

所有你需要做的是分享模式:

JTextArea textArea1 = new JTextArea(...); 
JTextArea textArea2 = new JTextArea(); 
textArea2.setDocument(textArea1.getDocument()); 

現在,無論你在任何類型文本區域將反映在兩個文本區域中。

+0

這個工程!謝謝!它也似乎比我之前做的更快,太好了,再次感謝! – tauraamui