// License: GPL. For details, see Readme.txt file. package org.openstreetmap.gui.jmapviewer.checkBoxTree; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.event.MouseAdapter; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellRenderer; /** * Renderer for checkBox Tree * * @author galo */ public class CheckBoxNodeRenderer implements TreeCellRenderer { private final CheckBoxNodePanel panel = new CheckBoxNodePanel(); private final DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer(); private final Color selectionForeground; private final Color selectionBackground; private final Color textForeground; private final Color textBackground; /** * Constructs a new {@code CheckBoxNodeRenderer}. */ public CheckBoxNodeRenderer() { final Font fontValue = UIManager.getFont("Tree.font"); if (fontValue != null) panel.getLabel().setFont(fontValue); final Boolean focusPainted = (Boolean) UIManager.get("Tree.drawsFocusBorderAroundIcon"); panel.check.setFocusPainted(focusPainted != null && focusPainted); selectionForeground = UIManager.getColor("Tree.selectionForeground"); selectionBackground = UIManager.getColor("Tree.selectionBackground"); textForeground = UIManager.getColor("Tree.textForeground"); textBackground = UIManager.getColor("Tree.textBackground"); } protected CheckBoxNodePanel getPanel() { return panel; } public void addNodeListener(MouseAdapter listener) { panel.addMouseListener(listener); } // -- TreeCellRenderer methods -- @Override public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean selected, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) { CheckBoxNodeData data = null; if (value instanceof DefaultMutableTreeNode) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; final Object userObject = node.getUserObject(); if (userObject instanceof CheckBoxNodeData) { data = (CheckBoxNodeData) userObject; } } //final String stringValue = // tree.convertValueToText(value, selected, expanded, leaf, row, false); //panel.label.setText(stringValue); panel.setSelected(Boolean.FALSE); panel.setEnabled(tree.isEnabled()); if (selected) { panel.setForeground(selectionForeground); panel.setBackground(selectionBackground); panel.getLabel().setForeground(selectionForeground); panel.getLabel().setBackground(selectionBackground); } else { panel.setForeground(textForeground); panel.setBackground(textBackground); panel.getLabel().setForeground(textForeground); panel.getLabel().setBackground(textBackground); } if (data == null) { // not a check box node; return default cell renderer return defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); } //panel.label.setText(data.getText()); panel.setData(data); panel.setSelected(data.isSelected()); return panel; } /* private JPopupMenu createPopupMenu(final AbstractLayer layer) { JMenuItem menuItem; //Create the popup menu. if (layer.isVisibleTexts()) menuItem = new JMenuItem("hide texts"); else menuItem = new JMenuItem("show texts"); JPopupMenu popup = new JPopupMenu(); popup.add(menuItem); menuItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { setVisibleTexts(layer, !layer.isVisibleTexts()); } }); return popup; } private void setVisibleTexts(AbstractLayer layer, boolean visible) { layer.setVisibleTexts(visible); if (layer instanceof LayerGroup) { LayerGroup group = (LayerGroup) layer; if (group.getLayers() != null) for (AbstractLayer al : group.getLayers()) { setVisibleTexts(al, visible); } } } */ }