我创建了一个文本区域,必要时(当文本太长,无法再阅读时),我需要在文本区域应用滚动条。
这是我写的代码,但由于某种原因,滚动条并没有真正出现?
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);
请参阅此
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;
}
}
来自http://forum.html.it/forum/showthread/t-1035892.html
-
由于使用
setBounds()
,您必须删除使JTextArea
在屏幕上具有绝对大小的代码行。这使其不可调整大小,并且JScrollPane
仅在其内容可调整大小时工作。// wrong textArea.setBounds(10, 152, 456, 255);
-
请阅读JTextArea和JScrollPane教程;请运行两个教程中的示例。
您向父级添加了两次TextArea(滚动窗格和面板)。将最后一行更改为
panel_1.add(sbrText);
确保preferredSize
和viewportSize
相同。滚动窗格将使用textArea
的首选大小来调整自己的大小,如果文本区域的首选大小足够大,可以显示自己,则这可能会导致滚动条消失。
请再次阅读JTextArea和JScrollPane教程。
textArea.setPreferredSize(new Dimension(456, 255));
textArea.setPreferedScrollableViewportSize(new Dimension(456, 255));