I'm having some problem finding a way to add a scrollbar in a JFrame. I found a method to redirect System.{in,out,err} to a JTextArea but I was not successful in adding a scrollbar. I hope this question is not redundant.
public class console extends JTextArea {
public static JTextArea console(final InputStream out, final PrintWriter in) {
final JTextArea area = new JTextArea();
new SwingWorker<Void, String>() {
@Override protected Void doInBackground() throws Exception {
Scanner s = new Scanner(out);
while (s.hasNextLine()) publish(s.nextLine() + "\n");
return null;
}
@Override protected void process(List<String> chunks) {
for (String line : chunks) area.append(line);
}
}.execute();
area.addKeyListener(new KeyAdapter() {
private StringBuffer line = new StringBuffer();
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (c == KeyEvent.VK_ENTER) {
in.println(line);
line.setLength(0);
} else if (c == KeyEvent.VK_BACK_SPACE) {
line.setLength(line.length() - 1);
} else if (!Character.isISOControl(c)) {
line.append(e.getKeyChar());
}
}
});
return area;
}
public static void main(String[] args) throws IOException {
PipedInputStream inPipe = new PipedInputStream();
PipedInputStream outPipe = new PipedInputStream();
System.setIn(inPipe);
System.setOut(new PrintStream(new PipedOutputStream(outPipe), true));
PrintWriter inWriter = new PrintWriter(new PipedOutputStream(inPipe), true);
JFrame frame = new JFrame("\"Console\"");
frame.getContentPane().add(console(outPipe, inWriter));
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// my code
}
Create a new JScrollPane object and set the ScrollBarPolicies.
If you do not want to the scollbars to appear always, just delete the policies.
EDIT
Also, don't use KeyListener on text components, use a combination of DocumentListener and key bindings instead. (Thanks to @MadProgrammer)
JScrollPane jsp = new JScrollPane(console(outPipe, inWriter));
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(jsp);

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With