SwingHandleMouseEvent
VTKExamples/Java/SwingIntegration/SwingHandleMouseEvent
Description¶
This example shows how to display in a JLabel the point the mouse is hovering over using a mouse listener.
Code¶
SwingHandleMouseEvent.java
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import vtk.*; public class SwingHandleMouseEvent extends JFrame { static { System.loadLibrary("vtkCommonJava"); System.loadLibrary("vtkFilteringJava"); System.loadLibrary("vtkIOJava"); System.loadLibrary("vtkImagingJava"); System.loadLibrary("vtkGraphicsJava"); System.loadLibrary("vtkRenderingJava"); } public SwingHandleMouseEvent() { // Create a sphere source vtkSphereSource sphere = new vtkSphereSource(); sphere.SetRadius(10.0); // Create a sphere mapper vtkPolyDataMapper sphereMapper = new vtkPolyDataMapper(); sphereMapper.SetInputConnection(sphere.GetOutputPort()); //create sphere actor vtkActor sphereActor = new vtkActor(); sphereActor.SetMapper(sphereMapper); // Create a render window panel to display the sphere final vtkRenderWindowPanel renderWindowPanel = new vtkRenderWindowPanel(); renderWindowPanel.setPreferredSize(new Dimension(600, 600)); renderWindowPanel.setInteractorStyle(new vtkInteractorStyleTrackballCamera()); add(renderWindowPanel, BorderLayout.CENTER); renderWindowPanel.GetRenderer().AddActor(sphereActor); // Create a status bar JPanel statusBar = new JPanel(new BorderLayout()); final JLabel label = new JLabel(" ", SwingConstants.RIGHT); statusBar.add(label, BorderLayout.EAST); statusBar.setBorder(new BevelBorder(BevelBorder.LOWERED)); add(statusBar, BorderLayout.SOUTH); final vtkCellPicker cellPicker = new vtkCellPicker(); // Show the point on the sphere the mouse is hovering over in the status bar renderWindowPanel.addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { // The call to Pick needs to be surrounded by lock and unlock to prevent crashes. renderWindowPanel.lock(); int pickSucceeded = cellPicker.Pick(e.getX(), renderWindowPanel.getHeight()-e.getY()-1, 0.0, renderWindowPanel.GetRenderer()); renderWindowPanel.unlock(); if (pickSucceeded == 1) { double[] p = cellPicker.GetPickPosition(); label.setText("Position: " + p[0] + ", " + p[1] + ", " + p[2]); } else { label.setText(" "); } } }); } public static void main(String[] args) { try { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { JPopupMenu.setDefaultLightWeightPopupEnabled(false); ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); JFrame frame = new SwingHandleMouseEvent(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }); } catch (Exception e) { e.printStackTrace(); } } }