使scrollRectToVisible与使用GroupLayout布局的面板一起工作

时间:2014-04-17 21:43:23

标签: java swing scroll jscrollpane

一个相当简单的示例:这会在JLabel中列出JPanel,将JPanel填入JScrollPane,并将其粘贴到JFrame中。然后我想要滚动窗格以使JLabel可见,但它不会这样做。我试过在标签和面板上调用scrollRectToVisible,没有运气,弄乱了视口,没有运气,尝试手动设置滚动条值,没有运气。显然,我做了一些愚蠢的事情,但我看不清楚。

import java.awt.Dimension;
import java.awt.Rectangle;

import javax.swing.*;

public class SillyTest {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JPanel panel = new JPanel();
                GroupLayout layout = new GroupLayout(panel);
                panel.setLayout(layout);
                GroupLayout.SequentialGroup seq = layout
                        .createSequentialGroup();
                GroupLayout.ParallelGroup par = layout.createParallelGroup();
                JLabel fish = new JLabel("fish");
                seq.addGap(3000);
                seq.addComponent(fish);
                par.addComponent(fish);
                par.addGap(200);
                layout.setHorizontalGroup(par);
                layout.setVerticalGroup(seq);
                JScrollPane scrollPane = new JScrollPane(panel);
                JFrame frame = new JFrame("whatever this is about");
                frame.add(scrollPane);
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.pack();
                frame.setVisible(true);
                fish.scrollRectToVisible(fish.getBounds());
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

在Windows7上使用JDK7代码可以正常使用。

如果您在其他版本上遇到问题,可以尝试:

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        fish.scrollRectToVisible(fish.getBounds());
    }
});

这只是确保将scrollRectToVisible()添加到EDT的末尾,以便在显示帧的所有初始逻辑之后对其进行处理。