如何解决Java滚动JScrollPane,JPanel位于底部
我有一个JScrollPane,里面有一个非常高的JPanel,可以动态更改,并在其末尾附加项目。我想要的是滚动到上述JScrollPane的底部,以便新添加的项在添加后立即可见(它们不是直接附加到滚动窗格,而是附加到其JPanel,并且是私有对象,因此不能参考。 如何简单地使滚动窗格滚动到最底部? 提前致谢!解决方法
JComponent.scrollRectToVisible(Rectangle)
。在“ 1”实例上调用它。
例如。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ScrollToNewLabel {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JPanel gui = new JPanel(new BorderLayout(3,3));
final JPanel panel = new JPanel(new GridLayout(0,1));
JScrollPane scroll = new JScrollPane(panel);
scroll.setPreferredSize(new Dimension(80,100));
gui.add(scroll,BorderLayout.CENTER);
JButton addLabel = new JButton(\"Add Label\");
gui.add(addLabel,BorderLayout.NORTH);
ActionListener listener = new ActionListener() {
int counter = 0;
public void actionPerformed(ActionEvent ae) {
panel.add(new JLabel(\"Label \" + ++counter));
panel.revalidate();
int height = (int)panel.getPreferredSize().getHeight();
Rectangle rect = new Rectangle(0,height,10,10);
panel.scrollRectToVisible(rect);
}
};
addLabel.addActionListener(listener);
JOptionPane.showMessageDialog(null,gui);
}
});
}
}
屏幕截图
例如。 2
例如根据Vincent的答案,使用JScrollPane.getVerticalScrollBar()
.setValue(height)
。其中“ 5”是面板的首选高度,以像素为单位。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ScrollToNewLabel {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JPanel gui = new JPanel(new BorderLayout(3,1));
final JScrollPane scroll = new JScrollPane(panel);
scroll.setPreferredSize(new Dimension(80,BorderLayout.NORTH);
ActionListener listener = new ActionListener() {
int counter = 0;
public void actionPerformed(ActionEvent ae) {
panel.add(new JLabel(\"Label \" + ++counter));
panel.revalidate();
int height = (int)panel.getPreferredSize().getHeight();
scroll.getVerticalScrollBar().setValue(height);
}
};
addLabel.addActionListener(listener);
JOptionPane.showMessageDialog(null,gui);
}
});
}
}
,scrollRectToVisible(...)和scrollBar.setValue(...)是常规解决方案。
您可能对“滚动表单”感兴趣,这可确保您在选择组件时可以自动滚动表单,以确保该组件在滚动窗格中可见。在幕后,它使用scrollRectToVisible()。
,将滚动条一直移动到底部的一种简单方法是将其值设置为100,如下所示:
scroll.getVerticalScrollBar().setValue(100);
这使它移到视口的底部。您可以在将组件添加到面板后添加它。
,这就是我以编程方式向下滚动的方式。
我喜欢它平滑地滚动到底部而不是立即跳到底部的方式。
/**
* Scrolls a {@code scrollPane} to its bottom.
*
* @param scrollPane
* the scrollPane that we want to scroll all the way down
*
*/
private void scrollDown(JScrollPane scrollPane) {
JScrollBar verticalBar = scrollPane.getVerticalScrollBar();
int currentScrollValue = verticalBar.getValue();
int previousScrollValue = -1;
while (currentScrollValue != previousScrollValue) {
// Scroll down a bit
int downDirection = 1;
int amountToScroll = verticalBar.getUnitIncrement(downDirection);
verticalBar.setValue(currentScrollValue + amountToScroll);
previousScrollValue = currentScrollValue;
currentScrollValue = verticalBar.getValue();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。