import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.border.*; import java.awt.*; /** An example that demonstrates 2D drawing in in Swing. */ /** Exercises: * - (easy) add a "clear" button * - (easy) add a "quit" button * - (easy) add a main method * - (harder) detect left mouse clicks in the drawing panel * and print out their coordinates. * - (hardest) insert shapes at mouse click locations */ class DrawingExample extends JFrame implements ActionListener { private JButton b1, b2, b3, b4, b5; private DrawingPanel drawingPanel; public DrawingExample() { super("Drawing Example"); b1 = new JButton("Line"); b2 = new JButton("Square"); b3 = new JButton("Triangle"); b4 = new JButton("Oval"); b5 = new JButton("Text"); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); this.setSize(200,200); drawingPanel = new DrawingPanel(); drawingPanel.setBackground(Color.white); JPanel eastPanel = new JPanel(); eastPanel.setBorder(BorderFactory.createTitledBorder("Controls")); eastPanel.setLayout(new GridLayout(5,1)); eastPanel.add(b1); eastPanel.add(b2); eastPanel.add(b3); eastPanel.add(b4); eastPanel.add(b5); JComponent panel = (JComponent)this.getContentPane(); TitledBorder title = BorderFactory.createTitledBorder("Drawing"); title.setTitlePosition(TitledBorder.BOTTOM); panel.setBorder(title); panel.setLayout(new BorderLayout()); panel.add(drawingPanel, BorderLayout.CENTER); panel.add(eastPanel, BorderLayout.EAST); this.setVisible(true); } // class that demonstrates some of the drawing // capabilities of Java. private static class DrawingPanel extends JPanel { boolean drawLine = false; boolean drawSquare = false; boolean drawTriangle = false; boolean drawOval = false; boolean drawText = false; // override this method to perform custom drawing. public void paintComponent(Graphics gc) { super.paintComponent(gc); if (drawLine) { gc.drawLine(10,10, 100,100); } if (drawSquare) { gc.drawRect(50,10, 35, 35); } if (drawTriangle) { Polygon triangle = new Polygon(); triangle.addPoint(20,70); triangle.addPoint(40,110); triangle.addPoint(70,90); gc.drawPolygon(triangle); } if (drawOval) { gc.drawOval(50,50, 25, 75); } if (drawText) { gc.drawString("CIS 120", 20, 150); } } } public void actionPerformed(ActionEvent e) { JButton source = (JButton)e.getSource(); if (source.equals(b1)) { drawingPanel.drawLine = true; } else if (source.equals(b2)) { drawingPanel.drawSquare = true; } else if (source.equals(b3)) { drawingPanel.drawTriangle = true; } else if (source.equals(b4)) { drawingPanel.drawOval = true; } else if (source.equals(b5)) { drawingPanel.drawText = true; } drawingPanel.repaint(); } }