gpt4 book ai didi

带有 JPanel 的 Java 滚动 JScrollPane 到底部

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:27 26 4
gpt4 key购买 nike

我有一个 JScrollPane,里面有一个非常高的 JPanel,它是动态改变的,项目被附加在它的末尾。我想要的是滚动到上述 JScrollPane 的底部,以便新添加的项目在添加时立即可见(它们不是直接附加到滚动 Pane ,而是附加到它的 JPanel,并且是私有(private)对象,所以不能引用。

我怎样才能简单地让滚动 Pane 滚动到最底部?提前致谢!

最佳答案

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);
}
});
}
}

屏幕截图

enter image description here

例如2

这例如基于文森特的 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);
}
});
}
}

关于带有 JPanel 的 Java 滚动 JScrollPane 到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com