⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.java

📁 画直线 圆 矩形 等等 可以供初学者使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Draw extends JFrame 
{
	Container container=this.getContentPane();
	
	MenuBar myMenuBar=new MenuBar();
	//定义左侧及底部的工具栏
	JToolBar myToolBar=new JToolBar("Tool",JToolBar.VERTICAL);
	JToolBar myColorBar=new JToolBar("Color",JToolBar.HORIZONTAL);
	//定义左侧工具栏上的上部及下部面板,上部容纳按钮,下部显示画图状态及鼠标位置
	JPanel panelToolBar=new JPanel();
    MessagePanel panelMsgToolBar=new MessagePanel();
    //画图主面板
	MyPanel panelDraw=new MyPanel();
	
	public Draw()
	{
		super("Draw");
	    //构造程序各部分的GUI
		AddMenu();
		AddToolBar();
		AddColorBar();
		//为画图主面板注册事件
		panelDraw.addMouseListener(panelDraw);
		panelDraw.addMouseMotionListener(panelDraw);
		//组合各模块,成为整体
		container.add(panelDraw,BorderLayout.CENTER);
		container.add(myColorBar,BorderLayout.SOUTH);
		container.add(myToolBar,BorderLayout.WEST);
		container.setBackground(Color.DARK_GRAY);
		//最大化显示
		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth() ; 
		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() ; 
		this.setSize(width,height-25) ; 
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
			
	}
	//颜色工具栏构造函数
	public void AddColorBar()
	{
		myColorBar.setFloatable(false);
		myColorBar.setBackground(Color.LIGHT_GRAY);
		myColorBar.setLayout(new GridLayout(1,1,5,5));
		
		JLabel lbMsgColor=new JLabel("Select one color:");
		myColorBar.add(lbMsgColor);
		
		JButton jbRed=new JButton("red");
		jbRed.setBackground(Color.RED);
		jbRed.setToolTipText("红色");
		jbRed.addActionListener(panelDraw);
		myColorBar.add(jbRed);
		
		JButton jbBlue=new JButton("blue");
		jbBlue.setBackground(Color.BLUE);
		jbBlue.addActionListener(panelDraw);
		jbBlue.setToolTipText("蓝色");
		myColorBar.add(jbBlue);
		
		JButton jbGreen=new JButton("green");
		jbGreen.setBackground(Color.GREEN);
		jbGreen.setToolTipText("绿色");
		jbGreen.addActionListener(panelDraw);
		myColorBar.add(jbGreen);
		
		JButton jbOrange=new JButton("orange");
		jbOrange.setBackground(Color.ORANGE);
		jbOrange.setToolTipText("橙色");
		jbOrange.addActionListener(panelDraw);
		myColorBar.add(jbOrange);
		
		JButton jbWhite=new JButton("white");
		jbWhite.setBackground(Color.WHITE);
		jbWhite.setToolTipText("白色");
		jbWhite.addActionListener(panelDraw);
		myColorBar.add(jbWhite);
		
		JButton jbPink=new JButton("pink");
		jbPink.setBackground(Color.PINK);
		jbPink.setToolTipText("粉色");
		jbPink.addActionListener(panelDraw);
		myColorBar.add(jbPink);
		
		JButton jbCyan=new JButton("cyan");
		jbCyan.setBackground(Color.CYAN);
		jbCyan.setToolTipText("浅蓝");
		jbCyan.addActionListener(panelDraw);
		myColorBar.add(jbCyan);
		
		JButton jbMagenta=new JButton("magenta");
		jbMagenta.setBackground(Color.MAGENTA);
		jbMagenta.setToolTipText("紫色");
		jbMagenta.addActionListener(panelDraw);
		myColorBar.add(jbMagenta);
		
		JButton jbYellow=new JButton("yellow");
		jbYellow.setBackground(Color.YELLOW);
		jbYellow.setToolTipText("黄色");
		jbYellow.addActionListener(panelDraw);
		myColorBar.add(jbYellow);
		
		JButton jbBlack=new JButton("black");
		jbBlack.setBackground(Color.BLACK);
		jbBlack.setToolTipText("黑色");
		jbBlack.addActionListener(panelDraw);
		myColorBar.add(jbBlack);
		
		
		
	}
	//左侧工具栏构造函数
	public void AddToolBar()
	{	
		myToolBar.setFloatable(false);
		myToolBar.setBackground(Color.DARK_GRAY);
		myToolBar.setLayout(new BorderLayout(5,5));
		
		panelToolBar.setLayout(new GridLayout(6,2,5,10));
		panelToolBar.setBackground(Color.PINK);
		
		JLabel lbMsgToolBar1=new JLabel("Tool Bar");
		lbMsgToolBar1.setForeground(Color.BLACK);
		panelToolBar.add(lbMsgToolBar1);
		
		JLabel lbMsgToolBar2=new JLabel("");
		panelToolBar.add(lbMsgToolBar2);
		
		JButton jbPen=new JButton("pen");
		jbPen.setToolTipText("钢笔");
		panelToolBar.add(jbPen);
		
		JButton jbRect=new JButton("Rect");
		jbRect.addActionListener(panelDraw);
		jbRect.setToolTipText("画一个矩形");
		panelToolBar.add(jbRect);
		
		JButton jbLine=new JButton("Line");
		jbLine.addActionListener(panelDraw);
		jbLine.setToolTipText("画一条直线");
		panelToolBar.add(jbLine);
		
		JButton jbCircle=new JButton("Cricle");
		jbCircle.addActionListener(panelDraw);
		jbCircle.setToolTipText("画一个圆形");
		panelToolBar.add(jbCircle);
		
		JButton jbText=new JButton("A");
		jbText.setToolTipText("文本框");
		panelToolBar.add(jbText);
		
		JButton jbEraser=new JButton("Eraser");
		jbEraser.addActionListener(panelDraw);
		jbEraser.setToolTipText("橡皮");
		panelToolBar.add(jbEraser);
		
		JButton jbFilled=new JButton("Filled");
		jbFilled.addActionListener(panelDraw);
		jbFilled.setToolTipText("填充类型");
		panelToolBar.add(jbFilled);
		
		JButton jbHollow=new JButton("Hollow");
		jbHollow.addActionListener(panelDraw);
		jbHollow.setToolTipText("空心类型");
		panelToolBar.add(jbHollow);
		
		JButton jbBack=new JButton("<<Back");
		jbBack.addActionListener(panelDraw);
		jbBack.setToolTipText("撤销");
		panelToolBar.add(jbBack);
		
		JButton jbForward=new JButton("Forward>>");
		jbForward.addActionListener(panelDraw);
		jbForward.setToolTipText("前进");
		panelToolBar.add(jbForward);
		
		panelMsgToolBar.setBackground(Color.LIGHT_GRAY);
		myToolBar.add(panelToolBar,BorderLayout.NORTH);
		myToolBar.add(panelMsgToolBar,BorderLayout.CENTER);
	}
	// 菜单栏构造函数
	public void AddMenu()
	{
		this.setMenuBar(myMenuBar);
		//以下是文件菜单项
		Menu fileMenu=new Menu("文件");	
		myMenuBar.add(fileMenu);
		
		//以下是编辑菜单项
		Menu editMenu=new Menu("编辑");
		myMenuBar.add(editMenu);
		
		//以下是查看菜单项
		Menu viewMenu=new Menu("查看");
		myMenuBar.add(viewMenu);
		
		//以下是图像菜单项
		Menu picMenu=new Menu("图像");
		myMenuBar.add(picMenu);
		
		//以下是颜色菜单项
		Menu colorMenu=new Menu("颜色");
		myMenuBar.add(colorMenu);
		
		MenuItem red=new MenuItem("red");
		red.setShortcut(new MenuShortcut(KeyEvent.VK_R));
		colorMenu.add(red);
		red.addActionListener(panelDraw);
		
		MenuItem blue=new MenuItem("blue");
		blue.setShortcut(new MenuShortcut(KeyEvent.VK_U));
		colorMenu.add(blue);
		blue.addActionListener(panelDraw);
		
		MenuItem green=new MenuItem("green");
		green.setShortcut(new MenuShortcut(KeyEvent.VK_G));
		colorMenu.add(green);
		green.addActionListener(panelDraw);
		
		MenuItem orange=new MenuItem("orange");
		orange.setShortcut(new MenuShortcut(KeyEvent.VK_O));
		colorMenu.add(orange);
		orange.addActionListener(panelDraw);
		
		MenuItem pink=new MenuItem("pink");
		pink.setShortcut(new MenuShortcut(KeyEvent.VK_P));
		colorMenu.add(pink);
		pink.addActionListener(panelDraw);
		
		MenuItem cyan=new MenuItem("cyan");
		cyan.setShortcut(new MenuShortcut(KeyEvent.VK_Y));
		colorMenu.add(cyan);
		cyan.addActionListener(panelDraw);
		
		MenuItem magenta=new MenuItem("magenta");
		magenta.setShortcut(new MenuShortcut(KeyEvent.VK_M));
		colorMenu.add(magenta);
		magenta.addActionListener(panelDraw);
		
		MenuItem yellow=new MenuItem("yellow");
		yellow.setShortcut(new MenuShortcut(KeyEvent.VK_Y));
		colorMenu.add(yellow);
		yellow.addActionListener(panelDraw);
		
		MenuItem black=new MenuItem("black");
		black.setShortcut(new MenuShortcut(KeyEvent.VK_B));
		colorMenu.add(black);
		black.addActionListener(panelDraw);
		
		//以下是帮助菜单项
		Menu helpMenu=new Menu("帮助");
		myMenuBar.add(helpMenu);
	}
	
	
	//主函数
	public static void main(String [] args)
	{
		Draw mainFrame=new Draw();
	}
		


 
 
}



//以下是画图主面板的定义程序

class MyPanel extends JPanel implements MouseMotionListener, MouseListener, ActionListener 
{
	int num = 300 ;//每种图形在此程序中最多只能出现的上限
int oo = 0 ;//画笔的当前状态 
boolean isFilled=false;//判断是否要填充
int x_tem=0;
int y_tem=0;
//记录器 
int randomtp = 0 ; //任意图形
int linetp = 0 ; //线
int recttp = 0 ; //矩形
int cricletp = 0 ; //圆
int texttp = 0 ; //文本
//定义用来保存图像是否填充数组
int[] randomfill=new int[num];
int[] linefill=new int[num];
int[] rectfill=new int[num];
int[] criclefill=new int[num];
int[] textfill=new int[num];

//定义用来保存图象颜色的数组 
int[] randomcolor = new int[num];
int[] linecolor = new int[num] ;
int[] rectcolor = new int[num] ;
int[] criclecolor = new int[num] ;
int[] textcolor = new int[num]; 

//定义用来保存图象数据的数组 
int[] randomx1 = new int[num] ;  
int[] randomy1 = new int[num] ; 
int[] randomx2 = new int[num] ; 
int[] randomy2 = new int[num] ;

int[] linex1 = new int[num] ;  
int[] liney1 = new int[num] ; 
int[] linex2 = new int[num] ; 
int[] liney2 = new int[num] ; 

int[] rectx1 = new int[num] ;  
int[] recty1 = new int[num] ; 
int[] rectx2 = new int[num] ; 
int[] recty2 = new int[num] ; 

int[] criclex1 = new int[num] ;  
int[] cricley1 = new int[num] ; 
int[] criclex2 = new int[num] ; 
int[] cricley2 = new int[num] ; 

 

//构造函数,初始化画笔颜色 
MyPanel() { 
randomcolor[0] = 9 ; 
linecolor[0] = 9 ; 
rectcolor[0] = 9 ; 
criclecolor[0] = 9 ; 
textcolor[0] = 9 ; 

} 
public void paint(Graphics g){ 
super.paint(g) ;//刷新界面 

this.setBackground(Color.white) ;//设置背景色 

this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)) ;//设置指针样式 

//g.drawRect(20,30,40,50);
// 以下是画笔的要画的几种图形的定义。
//实现原理是:将构成各个图形的四个参数(x1,y1,x2,y2)保存至对应的数组。
        //    调用repait函数将各个图形画出。
        //呵呵,这要感谢ChinaJava上的"爱穿鞋的牛"大虾
        // 太牛了,以前每种图形只能画一次。今天解决了(08-04-13)   
//画线 
for (int i = 0 ; i<linetp + 1 ; i++){ 
switch (linecolor[i]) { 
  case 0: g.setColor(Color.red) ; break; 
  case 1: g.setColor(Color.blue) ; break; 
  case 2: g.setColor(Color.green) ; break; 
  case 3: g.setColor(Color.orange) ; break; 
  case 4: g.setColor(Color.white) ; break ; 
  case 5: g.setColor(Color.pink) ; break ; 
  case 6: g.setColor(Color.cyan) ; break ;
  case 7: g.setColor(Color.magenta) ; break ; 
  case 8: g.setColor(Color.yellow) ; break ;
  case 9: g.setColor(Color.black) ; break ;
 } 
 
	g.drawLine(linex1[i] , liney1[i] , linex2[i] , liney2[i]) ;

} 

// 画任意图形(未完成)
for (int i = 0 ; i< randomtp + 1 ; i++){ 
switch (randomcolor[i]) { 
  case 0: g.setColor(Color.red) ; break; 
  case 1: g.setColor(Color.blue) ; break; 
  case 2: g.setColor(Color.green) ; break; 
  case 3: g.setColor(Color.orange) ; break; 
  case 4: g.setColor(Color.white) ; break ; 
  case 5: g.setColor(Color.pink) ; break ; 
  case 6: g.setColor(Color.cyan) ; break ;
  case 7: g.setColor(Color.magenta) ; break ; 
  case 8: g.setColor(Color.yellow) ; break ;
  case 9: g.setColor(Color.black) ; break ;
 } 
switch(randomfill[i])//选空心还是实心
{
	case 0:isFilled=false;break;
	case 1:isFilled=true;break;
}
//g.drawLine(linestart.x,linestart.y,randomx2[randomtp],randomy2[randomtp]);

}
//画矩形 
for (int i = 0 ; i< recttp + 1 ; i++){ 
switch (rectcolor[i]) { 
  case 0: g.setColor(Color.red) ; break; 
  case 1: g.setColor(Color.blue) ; break; 
  case 2: g.setColor(Color.green) ; break; 
  case 3: g.setColor(Color.orange) ; break; 
  case 4: g.setColor(Color.white) ; break ; 
  case 5: g.setColor(Color.pink) ; break ; 
  case 6: g.setColor(Color.cyan) ; break ;
  case 7: g.setColor(Color.magenta) ; break ; 
  case 8: g.setColor(Color.yellow) ; break ;
  case 9: g.setColor(Color.black) ; break ;
 } 
switch(rectfill[i])
{
	case 0:isFilled=false;break;
	case 1:isFilled=true;break;
}
//判断初始点和终点的位置,要不然方向不对
if(rectx2[i] > rectx1[i]) 
{ 
  	if(recty2[i] > recty1[i]) 
  	{ 
  		if(isFilled)
  		{
  			g.fillRect(rectx1[i] , recty1[i] , rectx2[i] - rectx1[i] , recty2[i] - recty1[i]);
  		}
  		else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -