我有一个内置非常高的JPanel的JScrollPane,它会动态更改,项目会在其末尾附加。我想要的是滚动到前面提到的JScrollPane的底部,以便新添加的项目立即可见(它们不会直接附加到滚动窗格,而是附加到其JPanel,并且是私有对象,所以不能引用。
如何让滚动窗格滚动到最底部? 提前谢谢!
答案 0 :(得分:16)
JComponent.scrollRectToVisible(Rectangle)
。在JPanel
实例上调用它。
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);
}
});
}
}
例如基于文森特的answer,使用JScrollPane.getVerticalScrollBar()
。setValue(height)
。其中height
是面板的首选高度(以像素为单位)。
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));
final 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();
scroll.getVerticalScrollBar().setValue(height);
}
};
addLabel.addActionListener(listener);
JOptionPane.showMessageDialog(null, gui);
}
});
}
}
答案 1 :(得分:2)
scrollRectToVisible(...)和scrollBar.setValue(...)是一般解决方案。
您可能对Scrolling a Form感兴趣,这可确保当您选择组件时,表单将自动滚动以确保该组件在滚动窗格中可见。在幕后它使用scrollRectToVisible()。
答案 2 :(得分:0)
将滚动条一直移动到底部的简单方法是将其值设置为100,如下所示:
scroll.getVerticalScrollBar().setValue(100);
这会使它移动到视口的底部。您可以在将组件添加到面板后添加此项。