@Override public void actionPerformed(ActionEvent ae) { if (ae.getSource() == entityInfoMenuItem) { MapNode mNode = pane.getRenderer().getNextNode(x, y); if (mNode != null) pane.showMapEntityInfoDialog(mNode, pane.isDebugModeEnabled()); } else if (ae.getSource() == clearMenuItem) { pane.getMap().clearMarkersAndTracks(); } else if (ae.getSource() == createMarkerMenuItem) { PositionPanel panel = new PositionPanel(); int res = JOptionPane.showConfirmDialog( pane, panel, "Specify a Position", JOptionPane.OK_CANCEL_OPTION); if (res == JOptionPane.OK_OPTION) { float lat = panel.getLat(); float lon = panel.getLon(); if (!Float.isNaN(lat) && !Float.isNaN(lon)) { pane.getMap().addMarker(lat, lon); pane.adjustToCenter(lat, lon); } } } else if (ae.getSource() == removeMarkerMenuItem) { pane.removeNearestMarker(x, y); } else if (ae.getSource() == loadMarkersMenuItem) { XMLDecoder decoder = null; try { File xmlFile = null; if (getFileChooser().showDialog(pane, "Load Markers") == JFileChooser.APPROVE_OPTION) { xmlFile = getFileChooser().getSelectedFile(); if (!xmlFile.getPath().contains(".")) xmlFile = new File(xmlFile.getPath() + ".xml"); } if (xmlFile != null && xmlFile.exists()) { pane.getMap().clearMarkersAndTracks(); decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(xmlFile))); int size = (Integer) decoder.readObject(); for (int i = 0; i < size; i++) { WritablePosition pos = (WritablePosition) decoder.readObject(); pane.getMap().addMarker(pos.getLat(), pos.getLon()); } pane.fireMapViewEvent(new MapViewEvent(pane, MapViewEvent.Type.MARKER_ADDED)); } } catch (IOException e) { e.printStackTrace(); } finally { if (decoder != null) decoder.close(); } } else if (ae.getSource() == saveMarkersMenuItem) { XMLEncoder encoder = null; try { File xmlFile = null; if (getFileChooser().showDialog(pane, "Save Markers") == JFileChooser.APPROVE_OPTION) { xmlFile = getFileChooser().getSelectedFile(); if (!xmlFile.getPath().contains(".")) xmlFile = new File(xmlFile.getPath() + ".xml"); encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(xmlFile))); encoder.writeObject(pane.getMap().getMarkers().size()); for (MapNode node : pane.getMap().getMarkers()) encoder.writeObject(new WritablePosition(node)); } } catch (IOException e) { e.printStackTrace(); } finally { if (encoder != null) encoder.close(); } } else if (ae.getSource() == functionsMenuItem) { JOptionPane.showMessageDialog( pane, MapViewPane.FUNCTION_DESCRIPTION.split("\\|"), "Function Description", JOptionPane.INFORMATION_MESSAGE); } else if (ae.getSource() == debugMenuItem) { pane.enableDebugMode(debugMenuItem.isSelected()); } }