有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java:ScrollablePicture使其在给定坐标下滚动

我正在尝试改编以下示例: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);
}

当我查看我的输出时,我可以看到我得到了方法中的坐标。但是窗口没有滚动。我现在的问题是:为什么它不滚动?我该如何解决这个问题

附言:这与价值观无关。因为我尝试了两个函数中的固定数字,例如:

Rectangle r = new Rectangle(2000,2000, 1, 1);

它在mouseDragged函数中有效,但在moveMap函数中无效


共 (2) 个答案

  1. # 1 楼答案

    你可以用坐标从JViewPort移动,那么你的代码应该是

    final JViewport viewport = scrollPane.getViewport();
    Rectangle rect = new Rectangle((int)X,(int) Y, 1, 1);
    Rectangle r2 = viewport.getVisibleRect();
    contentsInTheJScrollPane.scrollRectToVisible(new Rectangle(rect.x, rect.y, 
         (int) r2.getWidth(), (int) r2.getHeight()));
    
  2. # 2 楼答案

    你的代码运行良好

    以下是测试方法:

    在类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)处的像素可见:

    enter image description here

    左侧:没有moveMap(1, 250);调用。右方:有电话。-申请开始后的那一刻