📄 symbolchooser.java
字号:
} } if (command == NAMEFIELD_CMD) { handleManualNameFieldUpdate(getCode()); } if (command == DimensionQueryPanel.WIDTH_CMD || command == DimensionQueryPanel.HEIGHT_CMD) { setDesiredIconDimension(dqp.getDimension()); } } /** * Update the GUI to react to code typed into the string window. * * @param text */ protected void handleManualNameFieldUpdate(String text) { if (text == null) return; if (text.length() > 15) { text = text.substring(0, 15); } text = text.toUpperCase().replace('*', '-'); for (Iterator it = trees.iterator(); it.hasNext();) { SymbolTreeHolder sth = (SymbolTreeHolder) it.next(); if (sth != null) { DefaultMutableTreeNode node = sth.getNodeForCode(text); if (node != null) { if (Debug.debugging("symbology")) { Debug.output("SymbolChooser: Found node for " + text); } sth.getTree() .setSelectionPath(new TreePath(node.getPath())); sth.updateOptionsForCode(text); setSelectedTreeHolder(sth); } } } } /** * Initialization method to create the SymbolTreeHolders from the * SymbolReferenceLibrary. * * @param srl * @return List of nodes of the symbol part tree. * @throws FormatException */ protected List createNodes(SymbolReferenceLibrary srl) throws FormatException { List treeList = new LinkedList(); List subs = srl.getHead().getSubs(); int count = 1; if (subs != null) { for (Iterator it = subs.iterator(); it.hasNext();) { SymbolPart schemeSymbolPart = (SymbolPart) it.next(); CodeOptions options = ((CodeScheme) srl.positionTree.getFromChoices(count++)).getCodeOptions(null); treeList.add(new SymbolTreeHolder(schemeSymbolPart, options)); } } return treeList; } /** * Get the current symbol code listed in the GUI. * * @return code for current symbol. */ public String getCode() { if (nameField != null) return nameField.getText(); return EMPTY_CODE; } /** * Set the symbol code in the GUI. */ public void setCode(String code) { if (nameField == null) { // If we do this here, the default jtree presented // will be able to put it's default symbol code in the // text field widget. Has to be done before that // default JTree is made. nameField = new JTextField(code); } else { nameField.setText(code); } } /** * Get the icon displayed in the GUI. * * @return ImageIcon being displayed. */ public ImageIcon getImageIcon() { return symbolImage; } /** * Set the current icon in the display. * * @param ii */ public void setImageIcon(ImageIcon ii) { symbolImage = ii; if (symbolImageLabel == null) { symbolImageLabel = new JLabel(symbolImage); } else { symbolImageLabel.setIcon(symbolImage); } } /** * Set the dimension o the icon to be created. * * @param d */ public void setDesiredIconDimension(Dimension d) { iconDimension = d; dqp.setDimension(getDesiredIconDimension()); } /** * @return the dimension of the icon to be created. */ public Dimension getDesiredIconDimension() { if (iconDimension == null) { iconDimension = new Dimension(DEFAULT_ICON_DIMENSION, DEFAULT_ICON_DIMENSION); } return iconDimension; } /** * @return Returns the allowCreateImage. */ public boolean isAllowCreateImage() { return allowCreateImage; } /** * @param allowCreateImage The allowCreateImage to set. */ public void setAllowCreateImage(boolean allowCreateImage) { this.allowCreateImage = allowCreateImage; if (createImageFileButton != null) { createImageFileButton.setVisible(allowCreateImage); } } public static ImageIcon showDialog(Component component, String title, SymbolReferenceLibrary srl, String defaultSymbolCode) throws HeadlessException { final SymbolChooser pane = new SymbolChooser(srl); SymbolTracker ok = new SymbolTracker(pane); JDialog dialog = createDialog(component, title, true, pane, ok, null); dialog.addWindowListener(new SymbolChooserDialog.Closer()); dialog.addComponentListener(new SymbolChooserDialog.DisposeOnClose()); pane.setCode(defaultSymbolCode); pane.handleManualNameFieldUpdate(defaultSymbolCode); dialog.show(); // blocks until user brings dialog down... return ok.getImageIcon(); } /** * Creates JDialog window displaying a SymbolChooser. */ public static JDialog createDialog(Component c, String title, boolean modal, SymbolChooser chooserPane, ActionListener okListener, ActionListener cancelListener) throws HeadlessException { return new SymbolChooserDialog(c, title, modal, chooserPane, okListener, cancelListener); } public static void main(String[] args) { Debug.init(); ArgParser ap = new ArgParser("SymbolChooser"); ap.add("type", "Type of symbol image set being used (PNG, GIF or SVG, PNG is default)", 1); ap.add("path", "Path to root directory of symbol image set if not in classpath", 1); ap.add("default", "15 character code for default icon", 1); ap.add("verbose", "Print messages"); if (!ap.parse(args)) { ap.printUsage(); System.exit(0); } String arg[]; arg = ap.getArgValues("type"); String symbolImageMakerClass = "com.bbn.openmap.tools.symbology.milStd2525.PNGSymbolImageMaker"; if (arg != null) { if (arg[0].equalsIgnoreCase("SVG")) { symbolImageMakerClass = "com.bbn.openmap.tools.symbology.milStd2525.SVGSymbolImageMaker"; } else if (arg[0].equalsIgnoreCase("GIF")) { symbolImageMakerClass = "com.bbn.openmap.tools.symbology.milStd2525.GIFSymbolImageMaker"; } } String defaultSymbolCode = "SFPPV-----*****"; arg = ap.getArgValues("default"); if (arg != null) { defaultSymbolCode = arg[0]; } arg = ap.getArgValues("verbose"); if (arg != null) { Debug.put("symbology"); } SymbolReferenceLibrary srl = new SymbolReferenceLibrary(); if (srl.setSymbolImageMaker(symbolImageMakerClass) != null) { arg = ap.getArgValues("path"); if (arg != null) { srl.getSymbolImageMaker().setDataPath(arg[0]); } SymbolChooser.showDialog(null, "MIL-STD-2525B Symbol Chooser", srl, defaultSymbolCode); } else { Debug.output("Couldn't create SymbolImageMaker"); } System.exit(0); } public class SymbolTreeHolder extends ListenerSupport implements TreeSelectionListener { //Optionally play with line styles. Possible values are //"Angled", "Horizontal", and "None" (the default). protected boolean playWithTreeLineStyle = false; protected String treeLineStyle = "Angled"; protected JTree tree; protected JPanel optionPanel; protected CodeOptions options; protected Character[] optionChars = new Character[15]; protected Hashtable optionMenuHashtable; public SymbolTreeHolder(SymbolPart schemeSymbolPart, CodeOptions opts) { super(schemeSymbolPart); DefaultMutableTreeNode top = new DefaultMutableTreeNode(schemeSymbolPart); addNodes(top, schemeSymbolPart); tree = new JTree(top); tree.getSelectionModel() .setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setVisibleRowCount(10); tree.addTreeSelectionListener(this); tree.setSelectionPath(new TreePath(top)); if (playWithTreeLineStyle) { tree.putClientProperty("JTree.lineStyle", treeLineStyle); } options = opts; optionPanel = getOptionPanel(); } public JTree getTree() { return tree; } protected void addNodes(DefaultMutableTreeNode node, SymbolPart sp) { DefaultMutableTreeNode newNode = null; List subs = sp.getSubs(); if (subs != null) { for (Iterator it = subs.iterator(); it.hasNext();) { sp = (SymbolPart) it.next(); newNode = new DefaultMutableTreeNode(sp); node.add(newNode); addNodes(newNode, sp); } } } public DefaultMutableTreeNode getNodeForCode(String code) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel() .getRoot(); SymbolPart sp = (SymbolPart) root.getUserObject(); if (Debug.debugging("symbology.detail")) { Debug.output("Tree root object has " + sp.getClass().getName()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -