Java 将JTextArea设置为类似于日志

Java 将JTextArea设置为类似于日志,java,swing,jtextarea,Java,Swing,Jtextarea,您好,我如何使JTextArea(log)充当日志并显示输入和输出的文本 这是我到目前为止所拥有的 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { String mess = message.getText(); System.out.println(mess); } 这是我的车 // Variable

您好,我如何使JTextArea(log)充当日志并显示输入和输出的文本

这是我到目前为止所拥有的

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String mess = message.getText();
    System.out.println(mess);

}
这是我的车

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea log;
private javax.swing.JTextField message;
// End of variables declaration     
提前感谢您的帮助

你可以说

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String mess = message.getText();
    System.out.println(mess);
    log.append(mess);

}

append()
函数将给定文本追加到文档末尾。

JTextArea有一个
append(String str)
方法,请尝试:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String mess = message.getText();
    System.out.println(mess);
    log.append(mess);
}
append()
将数据追加到末尾

相反,您需要首先使用
getText()
获取文本,将日志连接到它,然后使用
setText()
和新形成的错误消息

因此,从概念上讲,您的新文本是:

错误日志+以前显示的文本

SSCCE

package stack;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class AppendMyError {
    public static void main(String[] args) {
        final String[] errorMsg = {"NullPointerException",
                                   "ArrayIndexOutOfBoundsException",
                                   "OutOfMemoryException"
                                  };


        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run(){
                final JFrame jFrame = new JFrame("Useless Title");
                final JButton errorBtn = new JButton("Click");
                final JTextArea errorLog = new JTextArea(30,30);
                final JScrollPane scroll = new JScrollPane(errorLog);
                final Random rand = new Random();

                jFrame.setLayout(new FlowLayout(FlowLayout.CENTER));
                jFrame.getContentPane().add(scroll);
                jFrame.getContentPane().add(errorBtn);
                jFrame.pack();
                jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jFrame.setVisible(true);

                errorBtn.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent event) {
                        String currentText = errorLog.getText();
                        String newError = new Date() + " " +  errorMsg[rand.nextInt(errorMsg.length)];
                        String newTextToAppend = newError + "\n" + currentText;
                        errorLog.setText(newTextToAppend);
                    }
                });

            }
        });

    }
}  
输出:


如果您查看时间,最新的消息位于顶部。

我已经尝试过了,它只会显示最新的消息。我希望它保持在那里,并像System.out.println那样逐行执行。@Fusion如果我没有弄错的话,您希望较新的日志消息出现在顶部而不是添加在底部,对吗?@LittleChild:通常不应该将新数据添加到末尾。例如,使用您喜爱的文件编辑器打开jboss日志文件。您可以看到日志将附加到end@lakshman据我记忆所及,OP曾说过,
System.out.println()
将如何显示:-/use Thanks for this,但是有没有办法使新消息低于旧消息?在这种情况下,只需使用
append()
而不是我所做的所有胡言乱语。@Fusion请给我一个你想做的例子:)你好@Fusion。您确定在使用
append(String str)
方法时没有创建新日志吗?在上面的注释中,您说它只是改变了它,但是追加应该按照描述:

将给定的文本追加到文档的末尾。