JScrollPane中的java Dynamic JTextArea位于滚动条下
我有一个JFrame和一个包含JTextArea的JScrollPane。scrollpane配置为从不显示水平滚动条,而根据需要显示垂直滚动条。 随着文本区域中文本的增长,垂直滚动条最终出现,隐藏部分文本区域。当滚动条出现时,我希望滚动条能够根据需要调整其内容的大小
我发现的一个解决方法是始终显示垂直滚动条,但这看起来不太好,因为很少需要它
在我的系统(Windows 10)上输入足够的文本后,下面的代码段再现了该问题
import javax.swing.*;
import java.awt.*;
import static javax.swing.ScrollPaneConstants.*;
public class Test {
public static void main(String[] args) {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("text"));
panel.add(new JLabel("text"));
panel.add(new JLabel("text"));
JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setText("This text fits");
panel.add(textArea);
JScrollPane scrollPane =
new JScrollPane(panel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
JFrame frame = new JFrame("Title");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(scrollPane);
frame.pack();
frame.setVisible(true);
}
}
# 1 楼答案
要解决此问题,请更改:
致:
通过向文本区域提供大小提示,当添加更多文本时,滚动窗格能够更好地处理它
# 2 楼答案
只是组件的放置有问题。请参阅以下代码:
希望这会有所帮助。:-)
# 3 楼答案
重写doLayout()并执行任何您想要的操作,在doLayout(),您对如何处理子组件拥有最终决定权(在布局管理器的工作完成后)
但您需要先将textArea和scrollPane设置为属性,因为您需要在以后引用它们:
# 4 楼答案
玩不显示水平滚动条的游戏并没有真正的帮助
相反,您需要实现
Scrollable
接口来告诉scrollpane面板应该始终适合scrollpane的宽度。这将导致文本区域中的文本在添加文本时被正确包装您可以使用Scrollable Panel而不是实现
Scrollable
接口,它允许您使用类的方法更改可滚动属性您只需按如下方式更改代码: