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();
}
}
}