简体   繁体   English

获取JTextField文本并实时显示在JTextarea上

[英]Take JTextField text and display it on JTextarea in real time

I made this program for discord. 我制作这个程序是为了不和谐。 This program takes your text and puts it in this 'format' that allows discord to convert it to fancy letters. 该程序将您的文本放入“格式”中,以使不和谐将其转换为奇特的字母。 My problem is that while typing the text lags behind by 1 character. 我的问题是在键入文本时落后1个字符。 I am only a beginner and I don't know what to do to fix it. 我只是一个初学者,我不知道该如何解决。

Ps. 附言 I do not feel like using a button to convert the text! 我不喜欢使用按钮来转换文本!

My Code : 我的代码:

textField = new JTextField();
    textField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent e) {

            textArea.setText("");
            separatedText = textField.getText().toLowerCase().toCharArray();

            for(int i = 0; i < separatedText.length; i++) {
                textArea.append(separate ? ":regional_indicator_" + separatedText[i] + ":\n" : ":regional_indicator_" + separatedText[i] + ":");                        
            }

        }
    });

You can achieve this by adding a Document Listener to your JTextField. 您可以通过将文档侦听器添加到JTextField中来实现。 You don't give us what the "separate" boolean is, so i made the example in case this boolean is always true . 您没有给我们“分离的”布尔值是什么,所以我举了个例子说明这种布尔值始终为true

Small Preview: 小预览:

在此处输入图片说明

Source Code: 源代码:

package test;

import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class DocListenerTest extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            DocListenerTest r = new DocListenerTest();
            r.setVisible(true);
        });
    }

    public DocListenerTest() {
        super("test");
        getContentPane().setLayout(new GridLayout(5, 2));
        JTextField textField = new JTextField();
        textField.setBorder(BorderFactory.createTitledBorder("TextField"));
        getContentPane().add(textField);
        JTextArea textArea = new JTextArea();
        textArea.setBorder(BorderFactory.createTitledBorder("TextArea"));
        JScrollPane sp = new JScrollPane(textArea);
        getContentPane().add(sp);
        setSize(400, 400);
        textField.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent e) {
                addTextToArea();

            }

            private void addTextToArea() {
                textArea.setText("");
                char[] separatedText = textField.getText().toLowerCase().toCharArray();
                boolean separate = true; //Don't know the value of this.
                for (int i = 0; i < separatedText.length; i++) {
                    textArea.append(separate ? ":regional_indicator_" + separatedText[i] + ":\n"
                            : ":regional_indicator_" + separatedText[i] + ":");
                }
            }

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

            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                addTextToArea();

            }
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM