我有这个JTextPane
(包裹在JScrollPane
)中,并有个HTMLEditorKit
。的内容JTextPane
是简单的HTML,其中包含使用img标签嵌入的某些图片(本地文件)。问题是,当您加载时JTextPane
,需要花一秒钟的时间来加载,然后在页面底部显示滚动条。如果我做:
JTextPane text = new JTextPane();
JScrollPane scroll = new JScrollPane(text);
// do some set up...
scroll.getVerticalScrollBar().setValue(0);
它会暂时设置滚动条,然后出现另一个主题(大概负责加载图像)并将滚动条打回到底部。我尝试添加:
((AbstractDocument)text.getDocument()).setAsynchronousLoadPriority(-1);
但这并没有解决。有没有办法从任一得到一个事件text.getDocument()
或text
当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种选择是,我将另一个线程设置为等待一秒钟左右,然后设置滚动条,但这是一个糟糕的技巧。
你的建议?
您是否尝试过使用invokeLater?
final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scroll.getVerticalScrollBar().setValue(0);
}
});
如果这不起作用,那么深入研究图像视图将非常困难,因此我的下一步将是跟踪滚动条更改的原因:
scroll.setVerticalScrollbar(new JScrollBar() {
public void setValue(int value) {
new Exception().printStackTrace();
super.setValue(value);
}
});
您还可以在setValue()方法中使用调试器,而不仅仅是打印堆栈跟踪。
我有一个垂直滚动的JPanel,在该JPanel上有几个JScrollPane,当用户向下滚动面板时,如果用户的鼠标越过JScrollPane,他们就不能再滚动JPanel,他们必须将鼠标从JScrollPane移回面板上。过一段时间就会变得很烦人。
我有一个类可以画一些非常简单的图形,比如直线、圆和矩形。线条可以动态扩展,有时当它们扩展到超出分辨率时,如果没有滚动条,就无法看到。因此,我已经将JScrollPane添加到JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条还是无法滚动。 这是我所拥有的:-一个绘制组件(线条、矩形、圆形)的类-一个设置JFrame/JScrollPane的类 这是我的GUI类的摘录代码: 通过上面的代
问题内容: 每次(第一次除外),我在JEditorPane中设置的文本滚动条都会跳到JEditorPane的底部。有什么办法可以避免这种情况?我尝试的一种方法是在setText()之后使用setCaretPosition(0)。它可以工作,但这并不是我真正需要的。滚动条向下跳然后向上跳。有没有一种方法可以避免settext()上滚动条的任何移动? 我的代码: 问题答案: 有不同的方法可以做到这一点
问题内容: 我需要在JScrollPane中内容的 左侧 放置一个滚动条。是否可以在没有单独的JScrollBar组件的情况下完成?也许只是通过设置一些对齐方式? 问题答案: 通过反复试验,我发现 像魅力一样运作。
问题内容: 我有下一个代码: 自动向下滚动。但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动。我怎样才能解决这个问题? 问题答案: 添加新邮件时,使用尺寸与邮件窗格的首选大小相同的进行调用。给定垂直取向,它可方便地使的优选尺寸的邮件面板的高度的整数倍。另请参阅: 如何使用滚动窗格 。 附录:有关 文本区域滚动的 引人入胜的讨论也可能会有所帮助。
更新3: 无法使用JScrollPane找到合适的解决方案,并编写了自定义滚动窗格。