import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import javax.swing.UIManager; public class MenuFrame extends JFrame implements ActionListener { private JMenu fileMenu; private JMenuItem fileOpenMenuItem; private JMenuItem fileSaveMenuItem; private JMenuItem fileQuitMenuItem; private JMenu createMenu; private JMenuItem createLineMenuItem; private JMenuItem createRectangleMenuItem; private JMenuItem createEllipseMenuItem; private JMenuItem createPolygonMenuItem; public MenuFrame() { setLayout(new BorderLayout()); getContentPane().add(new DrawComponent(), BorderLayout.CENTER); JMenuBar menuBar = new JMenuBar(); this.fileMenu = new JMenu("File"); menuBar.add(this.fileMenu); this.fileOpenMenuItem = new JMenuItem("Open..."); this.fileOpenMenuItem.addActionListener(this); this.fileOpenMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); this.fileMenu.add(this.fileOpenMenuItem); this.fileSaveMenuItem = new JMenuItem("Save..."); this.fileSaveMenuItem.addActionListener(this); this.fileSaveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); this.fileMenu.add(this. fileSaveMenuItem); this.fileQuitMenuItem = new JMenuItem("Quit"); this.fileQuitMenuItem.addActionListener(this); this.fileQuitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); this.fileMenu.add(this. fileQuitMenuItem); this.createMenu = new JMenu("Create"); menuBar.add(this.createMenu); this.createLineMenuItem = new JMenuItem("Line"); this.createLineMenuItem.addActionListener(this); this.createMenu.add(this.createLineMenuItem); this.createRectangleMenuItem = new JMenuItem("Rectangle"); this.createRectangleMenuItem.addActionListener(this); this.createMenu.add(this.createRectangleMenuItem); this.createEllipseMenuItem = new JMenuItem("Ellipse"); this.createEllipseMenuItem.addActionListener(this); this.createMenu.add(this.createEllipseMenuItem); this.createPolygonMenuItem = new JMenuItem("Polygon"); this.createPolygonMenuItem.addActionListener(this); this.createMenu.add(this.createPolygonMenuItem); setJMenuBar(menuBar); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == this.fileOpenMenuItem) System.out.println("Open selected"); else if (source == this.fileSaveMenuItem) System.out.println("Save selected"); else if (source == this.fileQuitMenuItem) System.out.println("Quit selected"); else if (source == this.createLineMenuItem) System.out.println("Create line selected"); else if (source == this.createRectangleMenuItem) System.out.println("Create rectangle selected"); else if (source == this.createEllipseMenuItem) System.out.println("Create ellipse selected"); else if (source == this.createPolygonMenuItem) System.out.println("Create polygon selected"); } public class DrawComponent extends JComponent implements MouseListener, MouseMotionListener { public DrawComponent() { addMouseListener(this); addMouseMotionListener(this); } public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setStroke(new BasicStroke(3.0f)); } /** Called after mouseReleased() when mouse pressed and released at same spot */ public void mouseClicked(MouseEvent e) { System.out.println(e); } /** Called when mouse button pressed */ public void mousePressed(MouseEvent e) { System.out.println(e); } /** Called when mouse button released */ public void mouseReleased(MouseEvent e) { System.out.println(e); } /** Called when mouse moved into a component's region */ public void mouseEntered(MouseEvent e) { System.out.println(e); } /** Called when mouse moves out of a component's region */ public void mouseExited(MouseEvent e) { System.out.println(e); } /** Called when the mouse moves within a component's region */ public void mouseMoved(MouseEvent e) { System.out.println(e); } /** Called when the mouse moves within a component's region while a button is down */ public void mouseDragged(MouseEvent e) { System.out.println(e); } } public void center() { Dimension screenSize = getToolkit().getScreenSize(); Dimension frameSize = getSize(); Point location = new Point((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); setLocation(location); } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); JFrame.setDefaultLookAndFeelDecorated(true); MenuFrame f = new MenuFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(new Dimension(400, 400)); f.center(); f.setVisible(true); } }