I have created a textarea, and i need a scrollbar applied to the textarea when necessary (when the text gets too long down and it cant be read anymore).
this is the code i have written, but for some reason, the scrollbar doesnt really come up?
final JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setBounds(10, 152, 456, 255);
textArea.setBorder(border);
textArea.setLineWrap(true);
sbrText = new JScrollPane(textArea);
sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
panel_1.add(textArea);
see this
import javax.swing.*;
public class TestFrame extends JFrame
{
JTextAreaWithScroll textArea;
public TestFrame ()
{
super ("Test Frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
textArea = new JTextAreaWithScroll (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add (textArea.getScrollPane ());
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable()
{
public void run ()
{
TestFrame f = new TestFrame ();
f.setVisible (true);
}
});
}
}
class JTextAreaWithScroll extends JTextArea
{
private JScrollPane scrollPane;
public JTextAreaWithScroll (int vsbPolicy, int hsbPolicy)
{
scrollPane = new JScrollPane (this, vsbPolicy, hsbPolicy);
}
public JScrollPane getScrollPane ()
{
return scrollPane;
}
}
You have to remove the code line that makes the
JTextArea
have absolute size on the screen due to usingsetBounds()
. This makes it non-resizable, andJScrollPane
works only if its content is resizable.// wrong textArea.setBounds(10, 152, 456, 255);
Please read JTextArea and JScrollPane tutorial; please run examples from both tutorials.
You added the TextArea to a parent twice (scrollPane and panel). Change your last line to
panel_1.add(sbrText);
Make sure that the preferredSize
and the viewportSize
are the same. The scrollpane will size itself with the preferred size of the textArea
, and this can cause the scrollbars to disappear if the preferred size of the text area is large enough to display itself.
Again, please read the JTextArea and JScrollPane tutorials.
textArea.setPreferredSize(new Dimension(456, 255));
textArea.setPreferedScrollableViewportSize(new Dimension(456, 255));
来源:https://stackoverflow.com/questions/9624014/java-textarea-scrollpane