0

我必须将一个 jtextarea 的内容复制到另一个 jtextarea。怎么做。我做了以下事情:但是这个程序正在将一个 jtext 区域的文本逐个字符地写入另一个 jtextarea。我希望它在用户按下回车键时复制它(carage returm。我该怎么做?提前谢谢。

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;

public class JtextareaTest {

    static JTextComponent jtextArea1;
    static JTextArea jtextArea2;

    public static void main(String[] args) {
        jtextArea1 = new JTextArea(10, 20);
        jtextArea2 = new JTextArea(10, 20);
        jtextArea1.setEditable(true);
        jtextArea2.setEditable(true);
        MyDocListen listener = new MyDocListen();
        jtextArea1.getDocument().addDocumentListener(listener);
        JFrame frame = new JFrame("JTextArea");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Create and set up the content pane.
        Container newContentPane = frame.getContentPane();
        JPanel jpanel = new JPanel();
        jpanel.add(jtextArea1);
        jpanel.add(jtextArea2);
        newContentPane.add(jpanel, BorderLayout.CENTER);
        frame.setContentPane(newContentPane);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
}

class MyDocListen implements DocumentListener {

    @Override
    public void insertUpdate(DocumentEvent e) {
        getText();

    }

    @Override
    public void removeUpdate(DocumentEvent e) {
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
    }

    public void getText() {
        StringBuffer sb = new StringBuffer();
        String str = JtextareaTest.jtextArea1.getText();
        sb.append(str);
        JtextareaTest.jtextArea2.setText(sb.toString());
    }
}
4

2 回答 2

1

DocumentListener 用于检测文本文档的更改。当您希望每次文本更改时都发生某些事情时,您想使用它。

您说您希望每次用户按下回车键时都会发生一些事情。因此,正如@camickr 正确指出的那样,您应该考虑改用键绑定。阅读文档页面,因为这是在 JComponent 中处理热键的最正确方法。

快速而肮脏的方法是使用KeyListener代替,它在低级别监听按键。请注意,这不是最正确的方法,并且可能会使您的代码难以维护。

如果您确实希望使用 KeyListener,请执行以下操作:将您的 MyDocListen 类更改为实现 KeyListener 的其他类,并实现 KeyListener.keyTyped() 以检查是否是按下的回车键,如果是,调用 getText():

class MyKeyListener implements KeyListener {
    public void getText()
    {
        StringBuffer sb = new StringBuffer();
        String str = JtextareaTest.jtextArea1.getText();
        sb.append(str);
        JtextareaTest.jtextArea2.setText(sb.toString());
    }

    @Override
    public void keyPressed(KeyEvent e) {}

    @Override
    public void keyReleased(KeyEvent e) {}

    @Override
    public void keyTyped(KeyEvent e) {
    if (e.getKeyChar() == KeyEvent.VK_ENTER) {
            getText();
        }
    }
}

然后只需更改行

MyDocListen listener= new MyDocListen();

MyKeyListener listener = new MyKeyListener();

并确保将 KeyListener 添加到 JTextArea 本身,而不是其文档。为此,请替换此行:

jtextArea1.getDocument().addDocumentListener(listener);

有了这个:

jtextArea1.addKeyListener(listener);

那应该可以解决您的问题。

于 2013-10-08T13:05:31.730 回答
0

或使用这个->

private void jButtonKeyTyped(java.awt.event.KeyEvent evt) {     
    char c == evt.getKeyChar();
    if(c==KeyEvent.VK_ENTER){
    yoursecondtextarea.setText(yourfirsttextarea.getText());
    }
}
于 2014-02-04T14:48:08.337 回答