📄 editableomabstractline.java
字号:
// **********************************************************************// // <copyright>// // BBN Technologies// 10 Moulton Street// Cambridge, MA 02138// (617) 873-8000// // Copyright (C) BBNT Solutions LLC. All rights reserved.// // </copyright>// **********************************************************************// // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/omGraphics/EditableOMAbstractLine.java,v $// $RCSfile: EditableOMAbstractLine.java,v $// $Revision: 1.1.2.2 $// $Date: 2005/08/10 22:45:13 $// $Author: dietrick $// // **********************************************************************package com.bbn.openmap.omGraphics;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Component;import java.awt.Graphics2D;import java.awt.Polygon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JMenu;import javax.swing.JRadioButtonMenuItem;import com.bbn.openmap.Environment;import com.bbn.openmap.I18n;/** * The EditableOMAbstractLine encompasses an OMAbstractLine, providing * a mechanism for adding an arrowhead menu in the line editor menu. */public abstract class EditableOMAbstractLine extends EditableOMGraphic { protected JMenu arrowheadMenu = null; protected I18n i18n = Environment.getI18n(); public Component getGUI(GraphicAttributes graphicAttributes) { if (graphicAttributes != null) { JMenu ahm = getArrowHeadMenu(); graphicAttributes.setLineMenuAdditions(new JMenu[] { ahm }); return graphicAttributes.getGUI(); } return null; } public JMenu getArrowHeadMenu() { if (arrowheadMenu == null) { arrowheadMenu = new JMenu(i18n.get(EditableOMAbstractLine.class, "Arrows", "Arrows")); ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent ae) { String command = ae.getActionCommand(); try { int what = Integer.parseInt(command); if (what < 0) { ((OMAbstractLine) getGraphic()).addArrowHead(false); } else { ((OMAbstractLine) getGraphic()).addArrowHead(what); } generate(getProjection()); repaint(); } catch (NumberFormatException e) { } } }; boolean doArrowHead = ((OMAbstractLine) getGraphic()).hasArrowHead(); int currentDirection = OMArrowHead.ARROWHEAD_DIRECTION_FORWARD; if (doArrowHead) { currentDirection = ((OMAbstractLine) getGraphic()).getArrowHead().getArrowDirectionType(); } int descDir = -1; // this description direction ButtonGroup group = new ButtonGroup(); ImageIcon ii = createArrowIcon(new BasicStroke(1), 50, 20, descDir); JRadioButtonMenuItem button = new JRadioButtonMenuItem(ii, !doArrowHead); button.setActionCommand(String.valueOf(descDir)); group.add(button); button.addActionListener(listener); arrowheadMenu.add(button); for (descDir = OMArrowHead.ARROWHEAD_DIRECTION_FORWARD; descDir <= OMArrowHead.ARROWHEAD_DIRECTION_BOTH; descDir++) { ii = createArrowIcon(new BasicStroke(1), 50, 20, descDir); button = new JRadioButtonMenuItem(ii, doArrowHead && currentDirection == descDir); button.setActionCommand(String.valueOf(descDir)); group.add(button); button.addActionListener(listener); arrowheadMenu.add(button); } } return arrowheadMenu; } /** * Given some arrowhead parameters, create an ImageIcon that shows * it. * * @param stroke the BasicStroke to draw on the Icon. * @param width the width of the icon. * @param height the height of the icon. * @param arrowHeadType -1 for no arrowhead, use the OMArrowHead * directions for other versions. */ public ImageIcon createArrowIcon(BasicStroke stroke, int width, int height, int arrowHeadType) { BufferedImage bigImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) bigImage.getGraphics(); int middleY = height / 2; g.setBackground(OMColor.clear); g.setPaint(OMColor.clear); g.fillRect(0, 0, width, height); g.setPaint(Color.black); g.setStroke(stroke); g.drawLine(0, middleY, width, middleY); int upTip = (int) ((float) height * .25); int downTip = (int) ((float) height * .75); Polygon poly = null; if (arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_FORWARD || arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BOTH) { int rightWingX = (int) ((float) width * .75); poly = new Polygon(new int[] { width, rightWingX, rightWingX }, new int[] { middleY, upTip, downTip }, 3); g.fill(poly); g.draw(poly); // Seems to help with rendering problem. } if (arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BACKWARD || arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BOTH) { int leftWingX = (int) ((float) width * .25); poly = new Polygon(new int[] { 0, leftWingX, leftWingX }, new int[] { middleY, upTip, downTip }, 3); g.fill(poly); g.draw(poly); // Seems to help with rendering problem. } return new ImageIcon(bigImage); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -