DrawTool (一个简单的绘图工具)

来源:互联网 发布:html淘宝店的首页面 编辑:程序博客网 时间:2024/05/16 00:55

这是我学习java与面向对象时候的一个课程作业。其实就是课本上的例子,做了些简单的修改。

程序在以下环境下调试通过:

操作系统:Windows XP Pro XP1

编程工具:J2sdk1.4.2JCreator V3.5 Pro

程序名称DrawTool  (一个简单的绘图工具)

程序功能1—实现了 在绘图区域绘制一个正方形,且能够实现图形的拖动等基本操作。

2—实现了 通过菜单,选择框等控件正方形的边框颜色,且可以选择是否填充。

3—实现了 绘图区的清空,通过ScrollBar改变正方形大小的功能。

—实现了 形状未创建之前清空、改变大小等报错功能

5—实现了 程序的窗口的关闭,在菜单中退出功能。

 

程序中用到的类:

DrawTool :包含主程序的类。

DrawFrame JFrame类的扩展,提供绘图工具的用户界面。

DrawCanvas JComponent类的扩展,提供 绘图区。

ClearButton JButton 的扩展,充当清除绘图区的角色。

Rectangle :一个矩形类,维护矩形的当前位置,并画出来。

WidthScrollbar JScrollBar类的扩展,用来改变形状的大小。

ColorDelegator :一个处理颜色改变的类。

 

 

程序的源代码:

1 – DrawTool.Java

package zhijun.drawtool;

import zhijun.drawtool.DrawFrame;

public class DrawTool{

       private static DrawFrame drawFrame;

       public static void main(String [] args){

              drawFrame=new DrawFrame();

              drawFrame.show();

       }

}

2 – DrawFrame.java

package zhijun.drawtool;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class DrawFrame       extends JFrame

                                          implements    WindowListener, ActionListener

{     private     ColorDelegator choiceHandler;

       private void addItem(JMenu menu, String colorName, ActionListener listener) 

{     JMenuItem nextItem = new JMenuItem(colorName);

              nextItem.setActionCommand(colorName);

              nextItem.addActionListener(listener);

              menu.add(nextItem);    

       }

       public DrawFrame()     

{     this.setLocation(100,100);

              this.setSize(500,300);

              this.setResizable(false);

              JComboBox colorChoice = new JComboBox();

              colorChoice.addItem("Red");

              colorChoice.addItem("Green");

              colorChoice.addItem("Blue");

              colorChoice.setSelectedItem("Blue");

              ClearButton clearButton = new ClearButton();

              DrawCanvas canvas = new DrawCanvas(clearButton);

           JLabel widthLabel = new JLabel("Change Rectangle Width");

           WidthScrollbar widthScroll = new WidthScrollbar();

           widthScroll.addAdjustmentListener(canvas);

            JPanel panel = new JPanel();

           panel.setLayout(new FlowLayout());

           panel.add(widthLabel);

           panel.add(widthScroll);

           panel.add(colorChoice);

           panel.add(clearButton);

           Container content=this.getContentPane();

           content.setLayout(new BorderLayout());

           content.add(canvas, BorderLayout.CENTER);

           content.add(panel, BorderLayout.SOUTH);

           choiceHandler = new ColorDelegator(canvas);

           colorChoice.addItemListener(choiceHandler);

           JMenu colorMenu = new JMenu("SetColor");

              addItem(colorMenu, "Red", choiceHandler);

              addItem(colorMenu, "Green", choiceHandler);

              addItem(colorMenu, "Blue", choiceHandler);

              addItem(colorMenu, "Pink", choiceHandler);

              addItem(colorMenu, "Magenta", choiceHandler);

              addItem(colorMenu, "Orange", choiceHandler);

              addItem(colorMenu, "Cyan", choiceHandler);

              addItem(colorMenu, "DarkGray", choiceHandler);

              addItem(colorMenu, "LightGray", choiceHandler);

              addItem(colorMenu, "Gray", choiceHandler);

              addItem(colorMenu, "White", choiceHandler);

              addItem(colorMenu, "Black", choiceHandler);

              JCheckBoxMenuItem filledItem = new JCheckBoxMenuItem("Filled");

              filledItem.addItemListener(canvas);

              JMenu command = new JMenu("Command");

              command.add(filledItem);

              command.addSeparator();

              addItem(command, "Clear", canvas);

              addItem(command, "Quit", this);

              JMenuBar menuBar = new JMenuBar();

              menuBar.add(command);

              this.setJMenuBar(menuBar);

              JPopupMenu popupMenu = new JPopupMenu();

              popupMenu.add(colorMenu);

              canvas.addPopup(popupMenu);

           this.addWindowListener(this);

       }

       public void windowClosing(WindowEvent e)       {            System.exit(0);             }

       public void windowActivated(WindowEvent e) {}

       public void windowDeactivated(WindowEvent e) {}

       public void windowClosed(WindowEvent e) {}

       public void windowDeiconified(WindowEvent e) {}

       public void windowIconified(WindowEvent e) {}

       public void windowOpened(WindowEvent e) {}

       public void actionPerformed(ActionEvent e) {            System.exit(0);             }

}

3 – DrawCanvas.java

package zhijun.drawtool;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class DrawCanvas extends JComponent

implements ActionListener, MouseListener, MouseMotionListener, ItemListener, AdjustmentListener

{

       private Rectangle rectangle;

       private ClearButton clearButton;

       private Color currentColor;

       JPopupMenu popup;

       public DrawCanvas(ClearButton clearButton)

       {

              this.clearButton=clearButton;

              rectangle=null;

              currentColor=Color.red;

              this.setBackground(Color.yellow);

              clearButton.addActionListener(this);

              this.addMouseListener(this);

              this.addMouseMotionListener(this);

       }

       public void addPopup(JPopupMenu popup)

       {

              this.popup = popup;

              this.add(popup);    

       }

       public void setColor(Color color)  {     currentColor=color;       }

       public void paint(Graphics g)

       {     g.setColor(getBackground());

              Dimension size=getSize();

              g.fillRect(0,0,size.width,size.height);

              if (rectangle !=null)

              {

                     g.setColor(currentColor);

                     rectangle.draw(g);

              }

       }

       public void mousePressed(MouseEvent event)

       {     if (event.getButton() == MouseEvent.BUTTON3)

                     popup.show(this, event.getX(),event.getY());     

              else if (event.getButton() == MouseEvent.BUTTON1)

              {     rectangle = new Rectangle(event.getX(), event.getY());

                     repaint();

              }

       }

       public void mouseEntered(MouseEvent event)    {}

       public void mouseExited(MouseEvent event)       {}   

       public void mouseClicked(MouseEvent event)     {}

       public void mouseReleased(MouseEvent event)    {}

       public void mouseDragged(MouseEvent event)   

       {     if (rectangle == null)

              {     rectangle.moveTo(event.getX(), event.getY());   

                     repaint();

              }    

       }

       public void mouseMoved(MouseEvent event)      {}   

       public void actionPerformed(ActionEvent e)

       {     if(rectangle == null)

              {     JOptionPane.showMessageDialog(this, "还没有画出矩形,干吗这么着急清空。", "错误提示", JOptionPane.WARNING_MESSAGE);

              }

              if(e.getActionCommand().equals("Clear"))

              {     rectangle = null;

                     repaint();

              }

       }

       public void itemStateChanged(ItemEvent e)

       {     JCheckBoxMenuItem item = (JCheckBoxMenuItem)e.getSource();

              Rectangle.setFilled(item.getState());

              repaint();

       }

       public void adjustmentValueChanged(AdjustmentEvent e)

       {     if(rectangle == null)

              {     JOptionPane.showMessageDialog(this, "还没有画出矩形,系统自动为您生成一个。", "错误提示", JOptionPane.WARNING_MESSAGE);

              }

              int width = e.getValue();

              rectangle.setWidth(width);

              repaint();

       }    

}

4 – ColorDelegator.java

package zhijun.drawtool;

import java.awt.*;

import java.awt.event.*;

public class ColorDelegator implements ItemListener, ActionListener

{     private DrawCanvas drawingArea;

       public ColorDelegator(DrawCanvas canvas) {     drawingArea = canvas;  }    

       public void itemStateChanged(ItemEvent e)

       {     String colorName = (String)e.getItem();

              Color newColor = null;

              if           (colorName.equals("Red"))          newColor = Color.red;

              else if     (colorName.equals("Green"))        newColor = Color.green;

              else                                                          newColor = Color.blue;

              drawingArea.setColor(newColor);

              drawingArea.repaint();

       }

       public void actionPerformed(ActionEvent event)

       {     String colorName = (String)event.getActionCommand();

              Color newColor = null;

              if           (colorName.equals("Red"))           newColor = Color.red;

              else if     (colorName.equals("Green"))        newColor = Color.green;

              else if      (colorName.equals("Blue"))          newColor = Color.blue;

              else if      (colorName.equals("Pink"))          newColor = Color.pink;

              else if     (colorName.equals("Magenta"))    newColor = Color.magenta;

              else if     (colorName.equals("Orange"))      newColor = Color.orange;

              else if     (colorName.equals("Cyan"))         newColor = Color.cyan;

              else if      (colorName.equals("DarkGray"))  newColor = Color.darkGray;

              else if      (colorName.equals("LightGray"))  newColor = Color.lightGray;

              else if      (colorName.equals("Gray"))         newColor = Color.gray;

              else if     (colorName.equals("White"))        newColor = Color.white;

              else if      (colorName.equals("Black"))         newColor = Color.black;

              drawingArea.setColor(newColor);

              drawingArea.repaint();

       }    

}

5 – ClearButton.java

package zhijun.drawtool;

import java.awt.*;

import javax.swing.*;

public class ClearButton extends JButton

{     public ClearButton()

       {     super("Clear Canvas");

              this.setActionCommand("Clear");

       }

}

6 – Rectangle.java

package zhijun.drawtool;

import java.awt.*;

public class Rectangle

{     private int x;

       private int y;

       private int width = 100;

       private static boolean filled = false;

       public Rectangle(int x,int y)

       {     this.x=x;

              this.y=y;

       }

       public void moveTo(int x,int y)

       {     this.x=x;

              this.y=y;

       }

       public void draw(Graphics g)

       {     if (filled)         g.fillRect(x, y, width, width);

              else                g.drawRect(x, y, width, width);

       }

       public static void setFilled(boolean state)      {     filled = state;                 }

       public void setWidth(int width)                   {     this.width = width;        }

}

7 – WidthScrollbar.java

package zhijun.drawtool;

import java.awt.Dimension;

import javax.swing.*;

public class WidthScrollbar extends JScrollBar

{     public WidthScrollbar()  {     super(JScrollBar.HORIZONTAL, 100, 10, 100, 200);         }

       public Dimension getPreferredSize()     {     return new Dimension(100, 20);   }

}