Re: Adding SCROLLBARS to a JTextArea



bH wrote:
On Aug 29, 1:13 pm, Knute Johnson <nos...@xxxxxxxxxxxxxxxxxxxxxxx>
wrote:
bH wrote:
On Aug 28, 10:09 pm, Roedy Green <see_webs...@xxxxxxxxxxxxxxxxxxxx>
wrote:
On Tue, 28 Aug 2007 13:51:38 -0700, bH <bherbs...@xxxxxxxxxxx> wrote,
quoted or indirectly quoted someone who said :
"fTextArea.SCROLLBARS_BOTH;"
seehttp://mindprod.com/jgloss/jscrollpane.html
I have only used them on JTextAreas, JPanels and Canvases. I have
never used them on Dialogs.
--
Roedy Green Canadian Mind Products
The Java Glossaryhttp://mindprod.com
Hi Roedy,
I think that the emphasis for this Q was indeed on the JTextArea, not
a Dialog. That is if I read you correctly.
bH
Hi Knute and Roedy,
My solution:
From:
2D Graphics
Menus, Layouts, Styled Text, and Simple Geometry
By Monica Pawlan
January 5, 2001
http://java.sun.com/developer/technicalArticles/GUI/swingmenus/
A subsection of this text above: "Adding the Editable Text Area"; a
code snip
adapted for my solution and this scroll code snip inserted in the
original code above:
/** Create a frame with JTextArea and a menubar
* with a "File" dropdown menu.
**/
FileChooseApp (String title) {
super (title);
Container content_pane = getContentPane ();
// Create a user interface.
content_pane.setLayout ( new BorderLayout () );
fTextArea = new JTextArea ("");
//added this code snip for scroll
content_pane.add (fTextArea, "Center");
fTextArea.setEditable(true);
JScrollPane areaScrollPane = new JScrollPane(fTextArea);// added
this for scroll
areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AL­WAYS); //
added this for
scroll
areaScrollPane.setPreferredSize(new Dimension(200, 175));// added
this for scroll
areaScrollPane.setBorder(BorderFactory.createTitledBorder("Enter
or Edit Text:"));// added this for scroll
content_pane.add(areaScrollPane); // added this for scroll
//ended this code snip for scroll
// Use the helper method makeMenuItem
// for making the menu items and registering
// their listener.
JMenu m = new JMenu ("File");
// Modify task names to something relevant to
// the particular program.
m.add (fMenuOpen = makeMenuItem ("Open"));
m.add (fMenuOpen = makeMenuItem ("Save"));
m.add (fMenuClose = makeMenuItem ("Quit"));
JMenuBar mb = new JMenuBar ();
mb.add (m);
setJMenuBar (mb);
setSize (400,400);
} // ctor
Thanks
bH
bH:

You should add the JScrollPane to your ContentPane not the JTextArea.

--

Knute Johnson
email s/nospam/knute/- Hide quoted text -

- Show quoted text -

Hi Knute,

I really don't understand but I tried another revision below:
...................
fTextArea = new JTextArea ("");
fTextArea.setEditable(true);

//added this code revision

JScrollPane areaScrollPane = new JScrollPane(fTextArea);
areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
areaScrollPane.setPreferredSize(new Dimension(200, 175));
content_pane.add(areaScrollPane);

//ended this code revision

// Use the helper method makeMenuItem

.................

and it compiles and runs. But so did the other......

bH


Actually I'm surprised that it did. But normally you want to add the components in order to their containers.

When you create a JTextArea you can specify the size in columns and rows. This is an easy way to make sure that the JTextArea is big enough for the text you want to enter. Setting a preferredSize on the JScrollPane will probably work in most cases but different fonts may or may not allow you to have the amount of text that you want.

The layout managers in Java are very powerful and can be used to great advantage. I your case, you could specify rows/columns for your JTextArea and then call pack() instead of setSize(). This would give you a JTextArea with the appropriate rows/columns and a minimum sized JFrame around it. There is a lot of interference between sizes that you set and the size of things when the layout manager is done with them. In your case you have specified a size for the JScrollPane but I doubt that with a BorderLayout it is that size. It probably fills all the space inside of your 400x400 frame. That is what BorderLayout does to components, it makes them fit the available space.

If you are going to do much work with Java, you will want to learn the GridBagLayout. It is much more powerful and has many more options for laying out components.

So anyway, my suggestion is to set the number of rows and columns for your JTextArea and then pack() the frame. Skip the preferred sizes in this case, especially since you are using BorderLayout and it won't care about preferredSize.

--

Knute Johnson
email s/nospam/knute/
.



Relevant Pages

  • Re: Adding SCROLLBARS to a JTextArea
    ... I think that the emphasis for this Q was indeed on the JTextArea, ... adapted for my solution and this scroll code snip inserted in the ... JMenuBar mb = new JMenuBar; ...
    (comp.lang.java.help)
  • Re: Adding SCROLLBARS to a JTextArea
    ... I think that the emphasis for this Q was indeed on the JTextArea, ... adapted for my solution and this scroll code snip inserted in the ... JMenuBar mb = new JMenuBar; ...
    (comp.lang.java.help)
  • Automatically scroll to line
    ... If I have a JTextArea, in a JScrollPane, and I want to scroll it such that, ... line N is appearing at the top of the visible rectangle, ...
    (comp.lang.java.gui)
  • JScrollPane vertical bar is defaulting to the bottom
    ... I have a JScrollPane for a large panel, ... focus and caret position in the first JTextArea, ... scroll bar is at the top as expected. ...
    (comp.lang.java.gui)
  • re: Keeping the JScrollBar Value of JScrollPane with JTextArea.
    ... I was looking for a way to scroll a JTextArea and not lose my current ... We firstly store the current viewPosition in a variable oldPoint. ...
    (comp.lang.java.gui)