您的位置:首页 > 其它

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

2005-10-03 11:22 274 查看
这是我学习java与面向对象时候的一个课程作业。其实就是课本上的例子,做了些简单的修改。
程序在以下环境下调试通过:
[/b]

操作系统:Windows XP Pro XP1[/i][/b]编程工具:J2sdk1.4.2[/i][/b],JCreator V3.5 Pro[/i][/b]程序名称[/b]:DrawTool (一个简单的绘图工具)

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

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

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

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

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

程序中用到的类:[/b]
[/b]

DrawTool[/i][/b] :包含主程序的类。

DrawFrame[/i][/b] :JFrame类的扩展,提供绘图工具的用户界面。

DrawCanvas [/i][/b]:JComponent类的扩展,提供 绘图区。

ClearButton[/i][/b] :JButton 的扩展,充当清除绘图区的角色。

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

WidthScrollbar[/i][/b] :JScrollBar类的扩展,用来改变形状的大小。

ColorDelegator[/i][/b] :一个处理颜色改变的类。

[/b]

程序的源代码:[/b]
[/b]

1 – DrawTool.Java[/i][/b]

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
[/i][/b]

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
[/i][/b]

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
[/i][/b]

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[/i][/b]

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[/i][/b]

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
[/i][/b]

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); }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: