在JScrollPane的滚动的JComponent(Scrolling JComponent in

2019-10-17 19:55发布

我说,我有一个大的JComponent:

Dimension componentSize = new Dimension(5000,5000);

和一个较小的JScrollPane的:

Dimension scrollPaneSize = new Dimension(500,500);

我想显示我在JScrollPane中的JComponent的一部分,就像下面的图片:

白色矩形是我JScrollPane的,目前从(X1,Y1)显示的JComponent的一部分(x2,y2)。


那么,你有什么我尝试:

我创建了一个新的JComponent:

JComponent component = new JComponent(){
    protected void paintComponent(Graphics g)
    {
        // Here I draw a background
    } 
};

并把它作为JScrollPane的视口视图:

JScrollPane scrollPane = new JScrollPane();

scrollPane.setViewportView(component);

然后接上JScrollPane中以一个JFrame:

JFrame frame = new JFrame();

frame.setLayout(new BorderLayout());

frame.add(scrollPane, BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);

我试图改变可视面积:

scrollpane.getViewport().setBounds(x1,y1,500,500)

怎么了?

Answer 1:

setBounds被用于确定组件的位置和大小中它的父容器中。 这是不是你想要做什么。 除非您使用的是绝对布局,你不应该使用这种方法。

相反,尝试

component.scrollRectToVisible(new Rectangle(x1, y1, 500, 500));

代替...

检查出JComponent#scrollRectToVisible



Answer 2:

此代码总会引起不管视口的大小视口滚动。

scrollPane.getViewport().setViewPosition( new Point(x1, y1) );


文章来源: Scrolling JComponent in JScrollPane