Java 如何找到滚动条滑块的大小?

Java 如何找到滚动条滑块的大小?,java,slider,scrollbar,jscrollpane,Java,Slider,Scrollbar,Jscrollpane,我正在写一个比较两幅图像的程序。每个图像都显示在jScrollPane内的jLabel中。我想让用户在图像上单击并拖动以在jScrollPane中移动图像,当用户移动图像时,另一个图像也会移动。问题是当我有两个不同大小的图像时,因为它们以相同的增量移动,并且不会同时到达终点。我试图找到滑块的大小,使它们能够正确移动,同时到达终点 jScrollPane1 = new javax.swing.JScrollPane(); jScrollPane1.getHorizontalScrollBar().

我正在写一个比较两幅图像的程序。每个图像都显示在jScrollPane内的jLabel中。我想让用户在图像上单击并拖动以在jScrollPane中移动图像,当用户移动图像时,另一个图像也会移动。问题是当我有两个不同大小的图像时,因为它们以相同的增量移动,并且不会同时到达终点。我试图找到滑块的大小,使它们能够正确移动,同时到达终点

jScrollPane1 = new javax.swing.JScrollPane();
jScrollPane1.getHorizontalScrollBar().addAdjustmentListener(new HorizontalScrollBarMoved());
jScrollPane1.getVerticalScrollBar().addAdjustmentListener(new VerticalScrollBarMoved());


class HorizontalScrollBarMoved implements AdjustmentListener{
        @Override
        public void adjustmentValueChanged(AdjustmentEvent ae){

            jScrollPane1.getHorizontalScrollBar().setValue(ae.getValue());
            jScrollPane2.getHorizontalScrollBar().setValue(ae.getValue());
            jScrollPane3.getHorizontalScrollBar().setValue(ae.getValue());
        }
    }

class VerticalScrollBarMoved implements AdjustmentListener{
        @Override
        public void adjustmentValueChanged(AdjustmentEvent ae){

            jScrollPane1.getVerticalScrollBar().setValue(ae.getValue());
            jScrollPane2.getVerticalScrollBar().setValue(ae.getValue());
            jScrollPane3.getVerticalScrollBar().setValue(ae.getValue());
        }
    }


private void imageLabel1MouseDragged(java.awt.event.MouseEvent evt) {                                         

        int horizontalScrollBarInitialValue, verticalScrollBarInitialValue;
        horizontalScrollBarInitialValue = ScrollPane1.getHorizontalScrollBar().getValue();
        verticalScrollBarInitialValue = jScrollPane1.getVerticalScrollBar().getValue();

        jScrollPane1.getHorizontalScrollBar().setValue(horizontalScrollBarInitialValue - (evt.getX() - mousePressedX)/30);
        jScrollPane1.getVerticalScrollBar().setValue(verticalScrollBarInitialValue - (evt.getY() - mousePressedY)/30);           
    }  

mousePressedX
是我第一次按下鼠标拖动图像时存储X坐标的变量。

我怀疑你能否找到滑块大小。它是自动调谐的。您应该找到
JScrollPage
的大小,并将其与可见的
视图的大小进行比较

我注意到,jScrollPane内显示的图像大小是滑块大小和滚动条中剩余空间的总和。我实际上需要在滚动条中找到剩余空间的大小,我能想到的唯一方法是首先找到滑块的大小。为什么不找到图像的顶部并与JScrollPane#getHeight进行比较呢,或者图像和JScrollPage#getWidth的左侧?例如,我有一个宽度为1024的图像,JScrollPage#getWidth返回420,但是如果我将滑块移动到滚动条的末端,图像移动的值是610。因此,滑块大小为1024-610=414。我不知道如何使用JScrollPage#getWidth来解决我的问题,因为大小如此不同。您应该将JScrollPane的width/setHeight设置为图像大小。然后滚动条将正常工作。JScrollPane将更小(例如高度为420)。但是会正确滚动吗?如果我将JScrollPane的宽度/高度精确设置为图像大小,那么JScrollPane将占据整个屏幕。