📄 consoletextarea.java
字号:
package source;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import javax.swing.text.Document;
public class ConsoleTextArea extends JTextArea
{
public static boolean callInput = false;
public static ConsoleTextArea csta = null;
public static JTextArea jta = null;
public StringBuffer strbuf = new StringBuffer("");
//构造方法
public ConsoleTextArea(int cols, int vols)
{
super(cols, vols);
}
//设置输入输出流
public void setStreams(final InputStream[] inStreams,
final OutputStream[] outStreams, final JTextArea jta)
{
csta = this;
this.jta = jta;
int lengthOut = outStreams.length;
int lengthIn = inStreams.length;
for(int i = 0; i < lengthIn; ++i)
{
startConsoleReaderThread(inStreams[i]);
}
for(int i = 0; i < lengthOut; i++)
{
startConsoleWriterThread(outStreams[i]);
}
}
//启动控制台读取线程
private void startConsoleReaderThread(InputStream inStream)
{
//控制台输出窗口响应
final BufferedReader br = new BufferedReader(new InputStreamReader(inStream));
new Thread(new Runnable()
{
public void run()
{
StringBuffer sb = new StringBuffer();
try
{
String s;
Document doc = getDocument();
while((s = br.readLine()) != null)
{
boolean caretAtEnd = false;
caretAtEnd = getCaretPosition() == doc.getLength() ?
true : false;
sb.setLength(0);
append(sb.append(s).append('\n').toString());
if(caretAtEnd)
setCaretPosition(doc.getLength());
}
callInput = true;
br.close();
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null,
"从BufferedReader读取错误:" + e);
}
}
}).start();
}
//启动控制台写入线程
private void startConsoleWriterThread(OutputStream outStream)
{
final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outStream));
new Thread(new Runnable()
{
public void run()
{
try
{
strbuf.append(jta.getText());
strbuf.append("?????????\n#?e_N_d?#\n");
bw.write(strbuf.toString(), 0,
strbuf.length());
bw.flush();
strbuf.setLength(0);
bw.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,
"从BufferedReader读取错误:" + e);
}
}
}).start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -