gpt4 book ai didi

java - 如何滚动到 JScrollPane 中的特定位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:11 25 4
gpt4 key购买 nike

我有一个 JScrollPane,其中包含一个高度较大的 JPanel,这个大的 JPanel 包含更多的 Jpanel,如图所示。其中一些面板包含我用来显示标题的 JLabel。在顶部,有 JLabel,其编号与标题标签中的标题编号相匹配。我需要做的是,当我从顶部标签列表中单击一个标签时,JScrollBar 应该滚动到放置该标签的位置。

我不知道这是否可行,但如果有人知道如何滚动到 JScrollPane 中的特定位置,请帮助我。

enter image description here

最佳答案

假设您希望包含标签作为标题的整个面板可见:

Container parent = titleLabel.getParent();
parent.scrollRectToVisible(parent.getBounds());

不需要访问包含的视口(viewport)/scrollPane except(总有一个异常(exception),不是吗:-)

  • 调用 scrollRectToVisible 的组件具有自定义实现(如 f.i. 文本组件
  • 如果通过该方法到达的默认位置不符合您的喜好

编辑

@MadProgrammer 的代码片段 :-) - 但懒得删除 SwingX 的所有痕迹,所以我们开始吧:

final JLabel last = new JLabel("I'm the last");

int maxRow = 20;
int maxColumn = 10;

JComponent content = new JPanel(new GridLayout(maxRow, maxColumn));
for (int row = 0; row < maxRow; row++) {
for (int column = 0; column < maxColumn; column++) {
JComponent parent = new JPanel();
JLabel label = new JLabel("i'm in " + row + "/" + column);
if (row == (maxRow - 1) && column == (maxColumn - 1)) {
label = last;
last.setBorder(BorderFactory.createLineBorder(Color.RED));
}
parent.add(label);
content.add(parent);
}
}
JXFrame frame = wrapWithScrollingInFrame(content, "scroll");
Action action = new AbstractAction("scrollLastVisible") {

@Override
public void actionPerformed(ActionEvent e) {
last.scrollRectToVisible(last.getBounds());
}
};
addAction(frame, action);
show(frame, frame.getPreferredSize().width / 2, frame.getPreferredSize().height / 2);

关于java - 如何滚动到 JScrollPane 中的特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102620/

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