我有一个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);
}
}
只是组件的放置有问题。请参阅以下代码:
public TestFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane);
JPanel panel = new JPanel();
scrollPane.setColumnHeaderView(panel);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JLabel lblNewLabel = new JLabel("text");
panel.add(lblNewLabel);
JLabel lblNewLabel_2 = new JLabel("text");
panel.add(lblNewLabel_2);
JLabel lblNewLabel_1 = new JLabel("text");
panel.add(lblNewLabel_1);
JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setText("This text fits");
scrollPane.setViewportView(textArea);
}
希望这会有所帮助。:-)
玩不显示水平滚动条的游戏并没有真正的帮助。
相反,您需要实现Scrollable
界面来告诉scrollpane面板应该始终与scrollpane的宽度相适应。这将导致文本区域中的文本在添加文本时被正确包装。
您可以使用滚动面板,它允许您使用类的方法更改可滚动属性,而不是实现Scrollable
接口。
您只需按如下方式更改代码:
//JPanel panel = new JPanel();
ScrollablePanel panel = new ScrollablePanel();
panel.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );
要解决问题,请更改:
JTextArea textArea = new JTextArea();
到:
JTextArea textArea = new JTextArea(1,20);
通过向文本区域提供大小提示,当添加更多文本时,滚动窗格能够更好地处理它。
我有一个类可以画一些非常简单的图形,比如直线、圆和矩形。线条可以动态扩展,有时当它们扩展到超出分辨率时,如果没有滚动条,就无法看到。因此,我已经将JScrollPane添加到JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条还是无法滚动。 这是我所拥有的:-一个绘制组件(线条、矩形、圆形)的类-一个设置JFrame/JScrollPane的类 这是我的GUI类的摘录代码: 通过上面的代
问题内容: 我需要在JScrollPane中内容的 左侧 放置一个滚动条。是否可以在没有单独的JScrollBar组件的情况下完成?也许只是通过设置一些对齐方式? 问题答案: 通过反复试验,我发现 像魅力一样运作。
问题内容: 我有这个(包裹在)中,并有个。的内容是简单的HTML,其中包含使用img标签嵌入的某些图片(本地文件)。问题是,当您加载时,需要花一秒钟的时间来加载,然后在页面底部显示滚动条。如果我做: 它会暂时设置滚动条,然后出现另一个主题(大概负责加载图像)并将滚动条打回到底部。我尝试添加: 但这并没有解决。有没有办法从任一得到一个事件或当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种
我想将JScrollPane滚动条颜色更改为黑色。我试图使用UIManger进行更改。但什么也没找到。
问题内容: 我有下一个代码: 自动向下滚动。但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动。我怎样才能解决这个问题? 问题答案: 添加新邮件时,使用尺寸与邮件窗格的首选大小相同的进行调用。给定垂直取向,它可方便地使的优选尺寸的邮件面板的高度的整数倍。另请参阅: 如何使用滚动窗格 。 附录:有关 文本区域滚动的 引人入胜的讨论也可能会有所帮助。
问题内容: 每次(第一次除外),我在JEditorPane中设置的文本滚动条都会跳到JEditorPane的底部。有什么办法可以避免这种情况?我尝试的一种方法是在setText()之后使用setCaretPosition(0)。它可以工作,但这并不是我真正需要的。滚动条向下跳然后向上跳。有没有一种方法可以避免settext()上滚动条的任何移动? 我的代码: 问题答案: 有不同的方法可以做到这一点