基本上,我是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();
}
});
并在滚动滚动条的同时调整图像大小,
该方法按预期工作,但只有一次我点击一个按钮(四个中的任何一个)两次。
从那一刻起,每次点击任意按钮都会正确滚动滚动条等。
为什么?