【发布时间】:2017-08-15 02:52:49
【问题描述】:
我在 JScrollPane 中有一个 JPanel。 JPanel 垂直包含多个 JTextArea。
我喜欢在页面刷新时将滚动窗格的滚动保持在顶部。 目前,滚动总是从底部开始。
这是我当前的代码,它不起作用..
panel.invalidate();
panel.revalidate();
panel.repaint();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
((JPanel) panel).setLocation(new Point(0, 0));
}
});
我也尝试将下面的代码添加到滚动窗格,但它不起作用..
scrollPanel.getViewport().setViewPosition( new Point(0, 0) );
我研究了其他 stackoverflow 问题,他们在 Jscrollpane 中使用了 Jtextarea(他们使用 setCaretPosition(0) 解决了这个问题,但是我不能对面板使用相同的功能)。就我而言,有一个额外的层。
我该如何解决这个..?
编辑**
根据 Pavlo Viazovskyy 的建议,我也在下面尝试过,但它仍然不适合我.. :(
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scrollPane.getVerticalScrollBar().setValue(0);
}
});
【问题讨论】:
-
如果你将在 JScrollPane 上使用 setCaretPosition(0) 来保存你的 JPanel,它应该可以解决问题。
-
感谢您的意见。 JScrollPane 没有该方法; setCaretPosition().. 有没有办法在 JScrollPane 上使用它?
-
知道了。希望this post能帮到你。
-
@PavloViazovskyy 我从你分享的帖子中得到了一个新想法,但它仍然不适合我。我更新了这个问题只是为了展示我迄今为止尝试过的方法。谢谢。
-
设置视口位置应该可以。确保在 SwingUtilities.invokeLater() 中调用代码。如果您需要更多帮助,请发布适当的 minimal reproducible example 来说明问题。
标签: java swing user-interface jpanel jscrollpane