【问题标题】:Take JTextField text and display it on JTextarea in real time获取 JTextField 文本并在 JTextarea 上实时显示
【发布时间】:2018-11-14 17:58:12
【问题描述】:

我制作这个程序是为了不和谐。该程序获取您的文本并将其置于这种“格式”中,允许不和谐将其转换为花哨的字母。我的问题是,在输入文本时落后 1 个字符。我只是一个初学者,我不知道该怎么做才能解决它。

附言。我不想使用按钮来转换文本!

我的代码:

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] + ":");                        
            }

        }
    });

【问题讨论】:

    标签: java arrays jtextfield jtextarea discord


    【解决方案1】:

    您可以通过将Document Listener 添加到您的JTextField 来实现此目的。你没有告诉我们什么是“单独的”布尔值,所以我做了一个例子,以防这个布尔值总是true。

    小预览:

    源代码:

    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();
    
                }
            });
        }
    }
    

    【讨论】:

    • 非常感谢!很抱歉没有包含“单独的”布尔值。
    • @Michael 很高兴我帮助了你。考虑将我的答案标记为该问题的解决方案:)
    猜你喜欢
    • 2017-01-18
    • 2013-04-04
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多