java - 将 JTextArea 设置为像日志一样 - IT工具网

您好,我怎样才能使 JTextArea(日志)充当日志并显示输入和输出的文本?

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

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     

预先感谢您的帮助!

最佳答案

append() 将把数据附加到末尾。

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

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

error log + previously displayed text

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

            }
        });

    }
}  

输出:
enter image description here

如果您查看时间,就会发现较新的消息位于顶部。

关于java - 将 JTextArea 设置为像日志一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21963300/


原网址: 访问
创建于: 2024-02-18 16:00:11
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论