我的JScrollPane在JTextArea附近:
...
errorText = new JTextArea();
errorText.setLineWrap(true);
errorText.setWrapStyleWord(true);
errorText.setPreferredSize(new Dimension(300, 150));
JScrollPane scrollPane = new JScrollPane(errorText);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBorder(BorderFactory.createTitledBorder("Info Area"));
...
和代码,它将文本添加到errorText:
public void setText(String mes) {
e140TEST2.errorText.append(lineNum + ". " + mes + "\n");
lineNum++;
}
添加一些行后(当文本的高度超过JTextArea时),JScrollPane不起作用(文本不是scrooling)。它可以是什么??
答案 0 :(得分:6)
errorText.setPreferredSize(new Dimension(300,150));
不要硬编码文本区域(或任何组件)的首选大小。添加/删除文本时,首选大小会更改。
而是创建文本区域,如:
textArea = new JTextArea(5, 30);
提供初始尺寸。
答案 1 :(得分:0)
虽然不是理想的解决方案,但如果使用JTextPane实例而不是JTextArea实例,仍然可以设置首选大小(以像素为单位)并保留滚动功能。另外,JTextPane会自动换行,并在字边界处进行(这就是你所看到的)。请尝试以下SSCCE:
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
public class PaneWithScroll {
public static void main (String[] args) {
JTextPane errorText = new JTextPane();
//errorText.setLineWrap(true);
//errorText.setWrapStyleWord(true);
errorText.setPreferredSize(new Dimension(300, 150));
JScrollPane scrollPane = new JScrollPane (errorText);
scrollPane.setVerticalScrollBarPolicy
(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBorder (BorderFactory.createTitledBorder("Info Area"));
JFrame frame = new JFrame();
frame.add (scrollPane);
frame.pack();
frame.setVisible (true);
}
}
我应该补充一点,这可以作为一个快速补丁。但是,最佳实践要求您始终尝试将可能依赖于平台的规范与GUI设计分离。在这种情况下,绝对尺寸。
希望有所帮助!