我的想法是:有两个jtextarea,jtextarea1用于输入,jtextarea2用于输出,但是我想在jtextarea2组件上可以移动光标,而不改变它的内容。(效果像qq的聊天窗口)
我的一个解决方法是:在jtextarea2上注册key监听器,然后将焦点转移给jtextarea1。
textArea1.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
textArea2.grabFocus();//当在textArea1上面有键盘输入时,自动将焦点转移到textArea2;
}
});
可是这样子的话总会有一个字符出现在jtextarea2上面!请教各位如何解决这个问题
我的一个解决方法是:在jtextarea2上注册key监听器,然后将焦点转移给jtextarea1。
textArea1.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
textArea2.grabFocus();//当在textArea1上面有键盘输入时,自动将焦点转移到textArea2;
}
});
可是这样子的话总会有一个字符出现在jtextarea2上面!请教各位如何解决这个问题
(仅限功能,具体代码的优化,美化,就留给你了)
1. ctrl+enter 把jtextarea1的值放到jtextarea2
2. jtextarea1输入的同时,jtextarea2跟着变
3. 光标
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.JFrame;
import javax.swing.JTextArea;public class Test4TextArea extends JFrame { /**
* @param args
*/
public static void main(String[] args) {
new Test4TextArea();
} public Test4TextArea() {
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = this.getContentPane();
c.setLayout(new GridLayout(0, 1)); final JTextArea jta1 = new JTextArea();
jta1.setSize(400, 200);
jta1.setWrapStyleWord(true);
final JTextArea jta2 = new JTextArea();
jta2.setBackground(Color.LIGHT_GRAY);
jta2.setSize(400, 200);
jta2.setWrapStyleWord(true);
jta2.setEditable(false); // * ************* 3 BEGIN *************************
jta2.setEditable(true);
jta2.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub } public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub } public void keyTyped(KeyEvent e) {
if (e.getKeyCode() != KeyEvent.VK_UP
&& e.getKeyCode() != KeyEvent.VK_DOWN
&& e.getKeyCode() != KeyEvent.VK_LEFT
&& e.getKeyCode() != KeyEvent.VK_RIGHT) {
e.consume();
}
}
});
// ************* 3 END **************************/ // *********************** 1 BEGIN *******************************
jta1.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
jta2.setText(jta2.getText() + "\n" + jta1.getText());
jta1.setText("");
}
} public void keyReleased(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
}
});
// *********************** 1 END ******************************* // *********************** 2 BEGIN *******************************
// jta1.getDocument().addDocumentListener(new DocumentListener() {
//
// public void changedUpdate(DocumentEvent e) {
// jta2.setText(jta1.getText());
// }
//
// public void insertUpdate(DocumentEvent e) {
// jta2.setText(jta1.getText());
// }
//
// public void removeUpdate(DocumentEvent e) {
// jta2.setText(jta1.getText());
// }
// });
// *********************** 2 END ******************************* c.add(jta2);
c.add(jta1); setVisible(true);
}
}