Implementando uma janela de console com o componente JTextArea

Veja o código de como desenvolver um console utilizano o componente JTextArea.

Implementando uma janela de console com o componente JTextArea

Este exemplo cria uma janela de console usando JTextArea. Esta janela mostra toda a saída de dados para System.out e a System.err. Para isso, duas threads de leitura são criadas para recuperar a saída de dados e adicioná-los no componente JTextArea.

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    
    public class Console extends JFrame {
        PipedInputStream piOut;
        PipedInputStream piErr;
        PipedOutputStream poOut;
        PipedOutputStream poErr;
        JTextArea textArea = new JTextArea();
    
        public Console() throws IOException {
            // Configura System.out
            piOut = new PipedInputStream();
            poOut = new PipedOutputStream(piOut);
            System.setOut(new PrintStream(poOut, true));
    
            // Configura System.err
            piErr = new PipedInputStream();
            poErr = new PipedOutputStream(piErr);
            System.setErr(new PrintStream(poErr, true));
    
            // Adiciona barra de rolagem na área de texto
textArea.setEditable(false); textArea.setRows(20); textArea.setColumns(50); getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER); pack(); setVisible(true); // Cria as threads de leitura
new ReaderThread(piOut).start(); new ReaderThread(piErr).start(); } class ReaderThread extends Thread { PipedInputStream pi; ReaderThread(PipedInputStream pi) { this.pi = pi; } public void run() { final byte[] buf = new byte[1024]; try { while (true) { final int len = pi.read(buf); if (len == -1) { break; } SwingUtilities.invokeLater(new Runnable() { public void run() { textArea.append(new String(buf, 0, len)); // Mantém a última linha sempre visível
textArea.setCaretPosition(textArea.getDocument().getLength()); // Mantém a área do texto para um determinado tamanho de caractere
int idealSize = 1000; int maxExcess = 500; int excess = textArea.getDocument().getLength() - idealSize; if (excess >= maxExcess) { textArea.replaceRange("", 0, excess); } } }); } } catch (IOException e) { } } } }

O console é criado usando o código abaixo:

    try {
        new Console();
    } catch (IOException e) {
    }
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados