package nodebox.ui; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.event.EventListenerList; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; public class PaneMenu extends JComponent implements MouseListener { private static Image paneMenuLeft, paneMenuBackground, paneMenuRight; static { try { paneMenuLeft = ImageIO.read(PaneMenu.class.getResourceAsStream("/pane-menu-left.png")); paneMenuBackground = ImageIO.read(PaneMenu.class.getResourceAsStream("/pane-menu-background.png")); paneMenuRight = ImageIO.read(PaneMenu.class.getResourceAsStream("/pane-menu-right.png")); } catch (IOException e) { e.printStackTrace(); } } /** * The list of event listeners for this component. */ protected EventListenerList listenerList = new EventListenerList(); public PaneMenu() { Dimension d = new Dimension(103, 21); setMinimumSize(d); setMaximumSize(d); setPreferredSize(d); setEnabled(true); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (enabled) { addMouseListener(this); } else { removeMouseListener(this); } repaint(); } @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Full width minus left side and right side int contentWidth = getWidth() - 9 - 21; if (isEnabled()) { g.drawImage(paneMenuLeft, 0, 0, null); g.drawImage(paneMenuBackground, 9, 0, contentWidth, 21, null); g.drawImage(paneMenuRight, 9 + contentWidth, 0, null); } g2.setFont(Theme.SMALL_BOLD_FONT); g2.setColor(Theme.TEXT_NORMAL_COLOR); int textPosition = isEnabled() ? 9 : 5; SwingUtils.drawShadowText(g2, getMenuName(), textPosition, 14); } public String getMenuName() { return ""; } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } /** * Adds a ChangeListener to the slider. * * @param l the ChangeListener to add * @see #fireActionEvent * @see #removeActionListener */ public void addActionListener(ActionListener l) { listenerList.add(ActionListener.class, l); } /** * Removes a ChangeListener from the slider. * * @param l the ChangeListener to remove * @see #fireActionEvent * @see #addActionListener */ public void removeActionListener(ActionListener l) { listenerList.remove(ActionListener.class, l); } /** * Send a ChangeEvent, whose source is this Slider, to * each listener. This method method is called each time * a ChangeEvent is received from the model. * * @param menuKey The menu item key that was selected. * @see #addActionListener * @see javax.swing.event.EventListenerList */ protected void fireActionEvent(String menuKey) { ActionEvent actionEvent = new ActionEvent(this, 0, menuKey); Object[] listeners = listenerList.getListenerList(); for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == ActionListener.class) { ((ActionListener) listeners[i + 1]).actionPerformed(actionEvent); } } } }