在上述CustomOutputStream中如何做到让textArea像控制台一行一行输出
时间: 2024-02-12 07:07:57 浏览: 134
要让textArea像控制台一行一行输出,可以在CustomOutputStream中重写write方法,每当写入一个字符时,判断是否为换行符,如果是,则将当前的字符串追加到textArea中,并清空当前字符串;如果不是,则将字符添加到当前字符串中。当然,为了保证输出的效果,还需要将textArea设置为不可编辑,自动换行,垂直滚动条始终可见。以下是代码示例:
```
public class CustomOutputStream extends OutputStream {
private JTextArea textArea;
private StringBuilder sb = new StringBuilder();
public CustomOutputStream(JTextArea textArea) {
this.textArea = textArea;
// 设置textArea为不可编辑,自动换行,垂直滚动条始终可见
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setCaretPosition(textArea.getDocument().getLength());
JScrollPane scrollPane = (JScrollPane) textArea.getParent().getParent();
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
@Override
public void write(int b) throws IOException {
if (b == '\r') {
return;
}
if (b == '\n') {
String text = sb.toString() + "\n";
textArea.append(text);
sb.setLength(0);
} else {
sb.append((char) b);
}
}
}
```
阅读全文