Reputation:
How do I add scrollbars to a JTextArea?
Upvotes: 57
Views: 153335
Reputation: 1252
Simple Way to add JTextArea in JScrollBar with JScrollPan
import javax.swing.*;
public class ScrollingTextArea
{
JFrame f;
JTextArea ta;
JScrollPane scrolltxt;
public ScrollingTextArea()
{
// TODO Auto-generated constructor stub
f=new JFrame();
f.setLayout(null);
f.setVisible(true);
f.setSize(500,500);
ta=new JTextArea();
ta.setBounds(5,5,100,200);
scrolltxt=new JScrollPane(ta);
scrolltxt.setBounds(3,3,400,400);
f.add(scrolltxt);
}
public static void main(String[] args)
{
new ScrollingTextArea();
}
}
Upvotes: 5
Reputation: 31
I just wanted to say thank you to the topmost first post by a user whom I think is named "coobird". I am new to this stackoverflow.com web site, but I cant believe how useful and helpful this community is...so thanks to all of you for posting some great tips and advise to others. Thats what a community is all about.
Now coobird correctly said:
As Fredrik mentions in his answer, the simple way to achieve this is to place the JTextArea in a JScrollPane. This will allow scrolling of the view area of the JTextArea.
I would like to say:
The above statement is absolutely true. In fact, I had been struggling with this in Eclipse using the WindowBuilder Pro plugin because I could not figure out what combination of widgets would help me achieve that. However, thanks to the post by coobird, I was able to resolve this frustration which took me days.
I would also like to add that I am relatively new to Java even though I have a solid foundation in the principles. The code snippets and advise you guys give here are tremendously useful.
I just want to add one other tid-bit that may help others. I noticed that Coobird put some code as follows (in order to show how to create a Scrollable text area). He wrote:
JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);
I would like to say thanks to the above code snippet from coobird. I have not tried it directly like that but I am sure it would work just fine. However, it may be useful to some to let you know that when I did this using the WindowBuilder Pro tool, I got something more like the following (which I think is just a slightly longer more "indirect" way for WindowBuilder to achieve what you see in the two lines above. My code kinda reads like this:
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(23, 40, 394, 191);
frame.getContentPane().add(scrollPane);
JTextArea textArea_1 = new JTextArea();
scrollPane.setViewportView(textArea_1);`
Notice that WindowBuilder basically creates a JScrollPane called scrollpane (in the first three lines of code)...then it sets the viewportview by the following line: scrollPane.setViewportView(textArea_1). So in essence, this line is adding the textArea_1 in my code (which is obviously a JTextArea) to be added to my JScrollPane **which is precisely what coobird was talking about).
Hope this is helpful because I did not want the WindowBuilder Pro developers to get confused thinking that Coobird's advise was not correct or something.
Best Wishes to all and happy coding :)
Upvotes: 3
Reputation: 780
txtarea = new JTextArea();
txtarea.setRows(25);
txtarea.setColumns(25);
txtarea.setWrapStyleWord(true);
JScrollPane scroll = new JScrollPane (txtarea);
panel2.add(scroll); //Object of Jpanel
Above given lines automatically shows you both horizontal & vertical Scrollbars..
Upvotes: 7
Reputation: 451
You first have to define a JTextArea as per usual:
public final JTextArea mainConsole = new JTextArea("");
Then you put a JScrollPane over the TextArea
JScrollPane scrollPane = new JScrollPane(mainConsole);
scrollPane.setBounds(10,60,780,500);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
The last line says that the vertical scrollbar will always be there. There is a similar command for horizontal. Otherwise, the scrollbar will only show up when it is needed (or never, if you use _SCROLLBAR_NEVER). I guess it's your call which way you want to use it.
You can also add wordwrap to the JTextArea if you want to:Guide Here
Good luck,
Norm M
P.S. Make sure you add the ScrollPane to the JPanel and not add the JTextArea.
Upvotes: 18
Reputation: 161022
As Fredrik mentions in his answer, the simple way to achieve this is to place the JTextArea
in a JScrollPane
. This will allow scrolling of the view area of the JTextArea
.
Just for the sake of completeness, the following is how it could be achieved:
JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta); // JTextArea is placed in a JScrollPane.
Once the JTextArea
is included in the JScrollPane
, the JScrollPane
should be added to where the text area should be. In the following example, the text area with the scroll bars is added to a JFrame
:
JFrame f = new JFrame();
f.getContentPane().add(sp);
Thank you kd304 for mentioning in the comments that one should add the JScrollPane
to the container rather than the JTextArea
-- I feel it's a common error to add the text area itself to the destination container rather than the scroll pane with text area.
The following articles from The Java Tutorials has more details:
Upvotes: 80
Reputation: 5849
Put it in a JScrollPane
Edit: Here is a link for you: http://java.sun.com/docs/books/tutorial/uiswing/components/textarea.html
Upvotes: 18