JScrollPane不会立即刷新滚动条

时间:2014-05-24 11:09:32

标签: java swing zoom bufferedimage jscrollbar

基本上,我是Java新手,我的猜测是我遇到的问题与Java的UI框架实现方式有很大关系。

这是一个问题: 我已经实现了一个允许放大和缩小显示的BufferedImage

的控件

我在JPanel上渲染了一个图像,JPanel包含在一个滚动条中。

放大\ out等完美无缺。

Scrollbars在放大时正确渲染,在缩小时消失。

我想添加关注显示图像特定四分之一的功能

通过四个专用按钮,每个按钮发送一个int(1-4)来控制滚动条。

public void zoomToQuarter(int i) 
{
    double width = (currentBufferedImage.getWidth()*2.2)+1;
    double height = (currentBufferedImage.getHeight()*2.2)+1;

    JScrollBar vertical = scrollPane.getVerticalScrollBar();
    JScrollBar horizontal = scrollPane.getHorizontalScrollBar();

    horizontal.setMaximum((int)width);
    vertical.setMaximum((int)height);

    //scrollPane.revalidate();  

    BufferedImage zoomedImage = ImageUtilities.resizeImage(currentBufferedImage, width, height);
    renderBefferedImage(zoomedImage);
    focusedOnSubLocation = true;

    switch (i)
    {   
        case(1):
            vertical.setValue(0);
            horizontal.setValue(0);
            break;
        case(2):
            vertical.setValue(0);
            horizontal.setValue(horizontal.getMaximum());
            break;
        case(3):
            vertical.setValue(vertical.getMaximum());
            horizontal.setValue(0);
            break;
        case(4):
            vertical.setValue(vertical.getMaximum());
            horizontal.setValue(horizontal.getMaximum());
            break;

        default:
            break;
    }        
}

单击其中一个按钮会立即传播到此方法

q1Button = new JButton("Q1");
                lowerZoomPanel.add(q1Button);
                q1Button.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                        sgiImagePanel.pause();
                        sgiImagePanel.zoomToQuarter(1);
                        sgiImagePanel.revalidate();
                        sgiImagePanel.repaint();
                    }
                });

并在滚动滚动条的同时调整图像大小,

该方法按预期工作,但只有一次我点击一个按钮(四个中的任何一个)两次。

从那一刻起,每次点击任意按钮都会正确滚动滚动条等。

为什么?

0 个答案:

没有答案