Select to view content in your preferred language

Right mouse button doesn't work after i've added middle mouse button listener.

1050
2
Jump to solution
02-02-2021 04:56 AM
VanyaIvanov
Regular Contributor

Right mouse button doesn't work on the Scene after i've added mouse listener for middle mouse button and i cant rotate the scene using right mouse button now. Left click still works and i can move on the scene.

sceneView.setInteractionListener(new DefaultInteractionListener(sceneView)
{
public void onMousePressed(javafx.scene.input.MouseEvent e)
{
if(e.getButton() == MouseButton.MIDDLE)
{
javafx.geometry.Point2D screenPoint = new javafx.geometry.Point2D(Math.round(e.getX()), Math.round(e.getY()));
com.esri.arcgisruntime.geometry.Point surfacePoint = sceneView.screenToBaseSurface(screenPoint);
JOptionPane.showMessageDialog(null, "Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
}
}
});

 
0 Kudos
1 Solution

Accepted Solutions
MarkBaird
Esri Regular Contributor

You can fix this easily.  What has happened is that you've created your own interaction listener and taken over the onMousePressed event with your own logic.  What you need to do is pass the event back to the base class onMousePressed event if you are not pressing the middle mouse button.  See the "super" addition I've made to your code below:

 

          if(e.getButton() == MouseButton.MIDDLE)
          {
            javafx.geometry.Point2D screenPoint = new javafx.geometry.Point2D(Math.round(e.getX()), Math.round(e.getY()));
            com.esri.arcgisruntime.geometry.Point surfacePoint = sceneView.screenToBaseSurface(screenPoint);
            //JOptionPane.showMessageDialog(null, "Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
            System.out.println("Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
            // consume the event as you don't want any more to happen.
            e.consume();
          } else {
            // let the default listener you've overridden deal with other events
            super.onMousePressed(e);
          }

 

 

View solution in original post

2 Replies
MarkBaird
Esri Regular Contributor

You can fix this easily.  What has happened is that you've created your own interaction listener and taken over the onMousePressed event with your own logic.  What you need to do is pass the event back to the base class onMousePressed event if you are not pressing the middle mouse button.  See the "super" addition I've made to your code below:

 

          if(e.getButton() == MouseButton.MIDDLE)
          {
            javafx.geometry.Point2D screenPoint = new javafx.geometry.Point2D(Math.round(e.getX()), Math.round(e.getY()));
            com.esri.arcgisruntime.geometry.Point surfacePoint = sceneView.screenToBaseSurface(screenPoint);
            //JOptionPane.showMessageDialog(null, "Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
            System.out.println("Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
            // consume the event as you don't want any more to happen.
            e.consume();
          } else {
            // let the default listener you've overridden deal with other events
            super.onMousePressed(e);
          }

 

 

VanyaIvanov
Regular Contributor

Thank you! 

0 Kudos