?? drawingpanel.java
字號:
/*
* DrawingPanel.java
*
* Created on 2007年4月23日, 下午11:58
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package paintbox;
/**
*
* @author fly
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.io.*;
public class DrawingPanel extends JPanel implements MouseListener,MouseMotionListener{
/** Creates a new instance of DrawingPanel */
public static final int DRAWAREA = 600;
private ButtonBar buttonBar;
private ArrayList drawnItems;
private File openFile; //畫布上的圖形是從哪個(gè)文件中打開的
private boolean openFromFile; //說明畫布上的圖形是不是從文件中打開的
private boolean saved; //畫布上的圖形是否已經(jīng)保存
private Shape currentShape;
private Point basePoint, currentPoint, frontPoint;
private int lastShape;
private int slectedItem; //被選圖形在“drawnItems”中的下標(biāo)
public DrawingPanel (ButtonBar buttons)
{
buttonBar = buttons;
slectedItem=-1; //初始為-1,表明沒有圖形被選中
drawnItems = new ArrayList ();
openFromFile=false;
saved=true;
lastShape = ButtonBar.SELECT;
setBackground (Color.white);
setMinimumSize (new Dimension (DRAWAREA, DRAWAREA));
setPreferredSize (new Dimension (DRAWAREA, DRAWAREA));
addMouseListener (this);
addMouseMotionListener (this);
}
public boolean isSaved()
{
return saved;
}
public void setSaved()
{
saved=true;
}
public void setUnSaved()
{
saved=false;
}
public boolean isOpenFromFile()
{
return openFromFile;
}
public void setOpenFromFile(boolean f)
{
openFromFile=f;
}
public void setOpenFile(File file)
{
openFile=file;
}
public File getOpenFile()
{
return openFile;
}
public ArrayList getDrawnItems()
{
return drawnItems;
}
public void setDrawnItems(ArrayList drawnItems)
{
this.drawnItems=drawnItems;
repaint();
}
public int getSlectedItem()
{
return slectedItem;
}
public void quashSlectedItem()
{
if(slectedItem!=-1)
{
((Shape)drawnItems.get(slectedItem)).setUnSlected();
slectedItem=-1;
repaint();
}
}
public void paintComponent (Graphics page)
{
super.paintComponent (page);
if (drawnItems.size () > 0)
for (int index = 0; index <= drawnItems.size ()-1; index++)
((Shape) drawnItems.get (index)).draw (page);
}
public void mousePressed (MouseEvent event)
{
int currentAction = buttonBar.getButton ();
Color strokeColor = buttonBar.getStrokeColor ();
Color fillColor=buttonBar.getcurrentFillColor();
quashSlectedItem();
basePoint = event.getPoint ();
frontPoint=basePoint;
switch (currentAction)
{
case ButtonBar.SELECT: //以下代碼實(shí)現(xiàn)圖形的選定
lastShape = ButtonBar.SELECT;
if(slectedItem!=-1){
((Shape)drawnItems.get(slectedItem)).setUnSlected();
slectedItem=-1;
}
for(int n=drawnItems.size()-1; n>=0; n--)
{
if(((Shape)drawnItems.get(n)).isSlected(basePoint))
{
((Shape)drawnItems.get(n)).setSlected();
slectedItem=n;
break;
}
}
break;
case ButtonBar.LINE:
currentShape = new Line (strokeColor, basePoint,
basePoint);
lastShape = ButtonBar.LINE;
drawnItems.add (currentShape);
setUnSaved();
break;
case ButtonBar.OVAL:
currentShape = new Oval (strokeColor, basePoint, 0, 0);
lastShape = ButtonBar.OVAL;
drawnItems.add (currentShape);
setUnSaved();
break;
case ButtonBar.RECT:
currentShape = new Rect (strokeColor, basePoint, 0, 0);
lastShape = ButtonBar.RECT;
drawnItems.add (currentShape);
setUnSaved();
break;
case ButtonBar.POLY:
if (lastShape == ButtonBar.POLY)
((Poly) currentShape).updateLastPoint (basePoint.x,
basePoint.y);
else
{
lastShape = ButtonBar.POLY;
currentShape = new Poly (strokeColor, basePoint.x,
basePoint.y);
drawnItems.add (currentShape);
}
((Poly) currentShape).addPoint (basePoint.x, basePoint.y);
setUnSaved();
break;
case ButtonBar.FILLCOLOR:
for(int n=drawnItems.size()-1; n>=0; n--)
{
if(((Shape)drawnItems.get(n)).isSlected(basePoint))
{
if((Shape)drawnItems.get(n) instanceof BoundedShape)
{
((BoundedShape)drawnItems.get(n)).setFilled(fillColor);
setUnSaved();
}
break;
}
}
break;
case ButtonBar.COLOR:
for(int n=drawnItems.size()-1; n>=0; n--)
{
if(((Shape)drawnItems.get(n)).isSlected(basePoint))
{
((Shape)drawnItems.get(n)).setStrokeColor(strokeColor);
setUnSaved();
break;
}
}
break;
}
repaint ();
}
public void mouseDragged (MouseEvent event)
{
int currentAction = buttonBar.getButton ();
currentPoint = event.getPoint ();
switch (currentAction)
{
case ButtonBar.SELECT:
int xChanged,yChanged;
if(slectedItem!=-1)
{
xChanged=currentPoint.x-frontPoint.x;
yChanged=currentPoint.y-frontPoint.y;
frontPoint=currentPoint;
((Shape)drawnItems.get(slectedItem)).positionChanged(xChanged,yChanged);
setUnSaved();
}
break;
case ButtonBar.LINE:
((Line) currentShape).setEndPoint (currentPoint);
setUnSaved();
break;
case ButtonBar.OVAL:
((Oval) currentShape).setShape (basePoint, currentPoint);
setUnSaved();
break;
case ButtonBar.RECT:
((Rect) currentShape).setShape (basePoint, currentPoint);
setUnSaved();
break;
case ButtonBar.POLY:
((Poly) currentShape).updateLastPoint (currentPoint.x,
currentPoint.y);
setUnSaved();
break;
}
repaint ();
}
public void mouseMoved (MouseEvent event) {}
public void mouseReleased (MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
public void mouseClicked (MouseEvent event) {}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -