2004-10-29

畫圓小程式 by shumi

程式碼~
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

public class DrawCircleApp extends JApplet{

   boolean type = false;

   public void init(){
      super.init();
      getContentPane().add(new DrawPanel(), BorderLayout.CENTER);
      Action c = new CircleAction();
      Action a = new CancleAction();

      JPanel p = new JPanel();
      p.add(new JButton(c));
      p.add(new JButton(a));
      getContentPane().add(p, BorderLayout.NORTH);
      final JMenu fileMenu = new JMenu("Action");
      fileMenu.add(c);
      fileMenu.add(a);
      final JMenuBar menuBar = new JMenuBar();

      menuBar.add(fileMenu);
      setJMenuBar(menuBar);
   }

   public static void main(String[] args){
      JApplet applet = new DrawCircleApp();
      JFrame frame = new JFrame("DrawCircle");
      // To close the application:
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(applet);
      frame.setSize(100, 50);
      applet.init();
      applet.start();
      frame.setVisible(true);
   }

   class CircleAction extends AbstractAction{
      public CircleAction(){
         putValue(Action.NAME, "畫圓");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl C"));
      }

      public void actionPerformed(ActionEvent e){
         type = true;
      }

   }

   class CancleAction extends AbstractAction{
      public CancleAction(){
         putValue(Action.NAME, "清空");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl D"));
      }

      public void actionPerformed(ActionEvent e){
         type = false;

      }

   }

   class DrawPanel extends JPanel implements MouseListener, MouseMotionListener{
      Point2D p1, p2;

      public DrawPanel(){
         addMouseListener(this);
         addMouseMotionListener(this);
      }

      protected void paintComponent(Graphics g){
         super.paintComponent(g);
         Graphics2D g2d = (Graphics2D)g;
         if(type){
            if((p1 == null) | (p2 == null)){
               return;
            }

            Ellipse2D e = new Ellipse2D.Double(p1.getX(), p1.getY(), p2.getX()
                  - p1.getX(), p2.getY() - p1.getY());
            g2d.draw(e);
         }

      }

      public void mouseClicked(MouseEvent e){}

      public void mousePressed(MouseEvent e){
         p1 = (Point2D)e.getPoint();
      }

      public void mouseReleased(MouseEvent e){
         p2 = (Point2D)e.getPoint();
         repaint();
      }

      public void mouseEntered(MouseEvent e){}

      public void mouseExited(MouseEvent e){}

      public void mouseDragged(MouseEvent e){}

      public void mouseMoved(MouseEvent e){}

   }
}

沒有留言: