我正在尝试调整以下示例:http://docs.oracle.com/javase/tutorial/uiswing/examples/zipfiles/components-ScrollDemoProject.zip
我想做的目的是允许用户在图片上导航到他们自己选择的坐标(但不是通过鼠标)。因此,您有一张大图片,但只显示了一小部分,并且图片上的窗口会移动。这在使用鼠标时有效(参见 oracle 的示例)。但我想用用户选择的坐标来做到这一点。
在ScrollablePicture类中,您可以看到可以通过拖动鼠标来移动图片:
public void mouseDragged(MouseEvent e) {
Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
scrollRectToVisible(r);
}
我尝试做同样的事情,所以我在 mouseDragged 函数下面添加了这个方法:
public void moveMap(float X, float Y){
Rectangle r = new Rectangle((int)X,(int) Y, 1, 1);
System.err.println("Scroll to "+ r.x);
scrollRectToVisible(r);
}
当我查看输出时,我可以看到我在方法中获得了坐标。但窗口不滚动。我现在的问题是:为什么它不滚动以及如何解决这个问题?
Ps:与数值无关。因为我在两个函数中尝试使用固定数字,例如:
Rectangle r = new Rectangle(2000,2000, 1, 1);
它在 mouseDragged 函数中有效,但在 moveMap 函数中无效
最佳答案
您的代码运行良好。
测试方法如下:
在类ScrollDemo
中将图片设置为public
:
public ScrollablePicture picture;
在 createAndShowGUI()
中,将变量 JComponent newContentPane
的类型更改为:
ScrollDemo newContentPane = new ScrollDemo();
在 frame.setVisible(true);
调用您的 moveMap
方法之后:
frame.setVisible(true);
newContentPane.picture.moveMap(1, 250);
现在您可以看到图片向下滚动,因此 (1, 250)
处的像素可见:
左侧:没有 moveMap(1, 250);
调用。右侧:与通话。 - 应用程序启动后的那一刻。
关于Java:ScrollablePicture使其以给定坐标滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8432365/