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

📄 drawfigure.java

📁 一个JAVA写的画图板程序 基本功能都已实现
💻 JAVA
字号:
package DrawFigure;


import java.awt.*;
import java.awt.event.*;
//import java.awt.event.MouseMotionListener;

import javax.swing.*;

import java.util.*;

public class DrawFigure extends JFrame implements MouseListener,MouseMotionListener,
AdjustmentListener,ItemListener{
	JPanel p1 = new JPanel();
	JPanel p2 = new JPanel();
	JPanel top = new JPanel();
	JPanel bottom = new JPanel();
	ButtonGroup g = new ButtonGroup();   //此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
	JRadioButton op1 = new JRadioButton("画",true);    //实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
	JRadioButton op2 = new JRadioButton("直线",false);
	JRadioButton op3 = new JRadioButton("园",false);
	JRadioButton op4 = new JRadioButton("矩形",false);
    JCheckBox c1 = new JCheckBox("填充");     //复选框的实现,复选框是一个可以被选定和取消选定的项,它将其状态显示给用户。       
    Color c = Color.black;
    JTextArea tt = new JTextArea(2,3);        
    int f = 1;
    int x1,y1;
    int sx,sy,x,y;
    boolean fill = false;
    boolean flag = false;
    boolean hua = false;
    JScrollBar r1 = new JScrollBar(JScrollBar.HORIZONTAL,0,4,0,255);
    JScrollBar g1 = new JScrollBar(JScrollBar.HORIZONTAL,0,4,0,255);
    JScrollBar b1 = new JScrollBar(JScrollBar.HORIZONTAL,0,4,0,255);
    public DrawFigure(){
    	getContentPane().setLayout(new BorderLayout());
    	top.setOpaque(true);
    	top.setBackground(Color.white);
    	tt.setBackground(Color.black);
       p1.setLayout(new FlowLayout());
       p1.setBackground(Color.LIGHT_GRAY);
       p2.setLayout(new GridLayout(3,1));
       p2.setPreferredSize(new Dimension(150,50));
       p2.add(r1);p2.add(g1);p2.add(b1);
       tt.setEditable(false);
       g.add(op1);g.add(op2);g.add(op3);g.add(op4);   //将四个单选框加进buttongroup 来确保单选
        p1.add(op1);p1.add(op2);p1.add(op3);p1.add(op4);  //将四个单选按钮加到JPanel中
        p1.add(c1);p1.add(tt);
        bottom.add(p1);bottom.add(p2);
       c1.addItemListener(this);            //将一个 ItemListener 添加到 checkbox 中。
       r1.addAdjustmentListener(this);      //滚动条的实现 每当滚动条模型发生更改时,都会通知调整侦听器
       g1.addAdjustmentListener(this);
       b1.addAdjustmentListener(this);
       op1.addItemListener(this);           //将一个在抽象按纽中 ItemListener 添加到 复选或单选 中。
       op2.addItemListener(this);
       op3.addItemListener(this);
       op4.addItemListener(this);
       top.addMouseListener(this);          //添加指定的鼠标侦听器,以接收发自此组件的鼠标事件
       top.addMouseMotionListener(this);    //添加指定的鼠标移动侦听器,以接收发自此组件的鼠标移动事件。
        getContentPane().add(top,"Center");
        getContentPane().add(bottom,"South");
       // this.
        setTitle("绘图程序");
        setSize(500,300);
        setVisible(true);
       }
        public void mousePressed(MouseEvent e){
        	flag = false;
        	 sx = e.getX(); sy = e.getY();
        }
        public void mouseReleased(MouseEvent e){
        	int x0,y0;
        	Graphics g = top.getGraphics();
        	 switch(f){
        	 case 2:
        		// g.setXORMode(Color.white);
        		 //g.drawLine(sx, sy, x, y);
        		  x = e.getX();y = e.getY();
        		  g.setColor(c);       		  
        		  g.setPaintMode();
        		  g.drawLine(sx, sy, x, y);
        		  break;
        	 case 3:
        	 case 4:
        		 g.setXORMode(Color.white);
        		 x0 = x>sx? sx:x;  y0 = y>sy?sy:y;
        		 if(!fill){
        			 if(f == 3)
        				 g.drawOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        			 else 
        				 g.drawRect(x0, y0, Math.abs(x -sx), Math.abs(y- sy));
        	        }
        		 else{
        			 if(f == 3)
        				 g.fillOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        			 else
        				 g.fillRect(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        		 }
        		 g.setPaintMode();
        		 x = e.getX(); y = e.getY();
        		 x0 = x>sx ? sx:x;  y0 = y>sy?sy:y;
        		 g.setColor(c);
        		 if(! fill){
        			 if(f == 3)
        				 g.drawOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        			 else 
        				 g.drawRect(x0, y0, Math.abs(x -sx), Math.abs(y- sy));
        	        }
        		 else{
        			 if(f == 3)
        				 g.fillOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        			 else
        				 g.fillRect(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
        		 }
        		 break;
        		 
        }
        }
       
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}
        public void mouseClicked(MouseEvent e){}
        public void mouseMoved(MouseEvent e){}
        public void mouseDragged(MouseEvent e){
        	int x0,y0;
           Graphics g = top.getGraphics();
            switch(f){
            case 1:
            	x = e.getX(); y = e.getY();
            	g.setColor(c);
            	g.setPaintMode();
            	g.drawLine(sx, sy, x, y);
            	sx = x; sy = y;
            	break;
            case 2:
            	  //自创修改函数一
            		/*Color d = g.getColor();
            		g.setColor(Color.white);

            		g.drawLine(sx, sy, x1, y1);
            		g.setColor(d);
            		x = e.getX(); y = e.getY();
            		x1 = x; y1 = y;
            		g.setPaintMode();
                	g.drawLine(sx, sy, x, y);*/
            	 //修改函数二
            	
            	if(!flag){
            		x = e.getX(); y = e.getY();        //最后有一点不明白:我理解的setXORMode(color)应该是把指定的color与要绘图的区域内的颜色进行异或操作。
            		g.setXORMode(Color.white);         // 如区域内无颜色,应能绘出指定颜色的图形。   
            		g.drawLine(sx, sy, x, y);          // 如区域内已存在指定颜色,异或操作后应擦去指定颜色的图形
            		flag = true;                       // 如区域内内已存在其它颜色,应绘制出该颜色和指定颜色进行异或操作后的新颜色的图形。
            	}                                      //
            	else{                                  //
            		g.setXORMode(Color.white);         //
            	    g.drawLine(sx, sy, x, y);          //
            	    x = e.getX(); y = e.getY();        //
            	    g.drawLine(sx, sy, x, y);          //
            	}                                      //
            	break;
            case 3:
            case 4:
            	if(!flag){
            		x = e.getX(); y = e.getY();
            		x0 = x>sx? sx:x;  y0 = y>sy?sy:y;
            		g.setXORMode(Color.white);
           		 if(!fill){
            		if(f == 3)
            		g.drawOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
            		else
            		g.drawRect(x0, y0, Math.abs(x -sx), Math.abs(y- sy));	
            		//(int x, int y, int width, int height) 
                    //绘制指定矩形的边框。
            	          }
            	else{
            		if(f == 3)
            		 g.fillOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
       			 else
       				 g.fillRect(x0, y0, Math.abs(x - sx), Math.abs(y - sy));	
            	    }
            	  flag = true;
              }
             else{
            	 g.setXORMode(Color.white);
        		 x0 = x>sx? sx:x;  y0 = y>sy?sy:y;
            	 if(!fill){
             		if(f == 3)
             			g.drawOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
             		else
             			g.drawRect(x0, y0, Math.abs(x -sx), Math.abs(y- sy));	
             	           }
             	else{
             		if(f == 3)
             			g.fillOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
           			 else
           				g.fillRect(x0, y0, Math.abs(x - sx), Math.abs(y - sy));	
                    }
            	x = e.getX(); y = e.getY();
       		    x0 = x>sx ? sx:x;  y0 = y>sy?sy:y;
            	if(!fill){
            		if(f == 3)
            			g.drawOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
            		else
            			g.drawRect(x0, y0, Math.abs(x -sx), Math.abs(y- sy));	
            	          }
            	else{
            		if(f == 3)
            			g.fillOval(x0, y0, Math.abs(x - sx), Math.abs(y - sy));
          			 else
          				g.fillRect(x0, y0, Math.abs(x - sx), Math.abs(y - sy));	
                     }
            }
            break;
        }
       
    }
        
        public void actionPerformed(ActionEvent e){               
        	f = Integer.parseInt(e.getActionCommand());
        }
        public void adjustmentValueChanged(AdjustmentEvent e){
        	c = new Color(r1.getValue(),g1.getValue(),b1.getValue());
           tt.setBackground(c);
        }
        public void itemStateChanged (ItemEvent e){
        	if(e.getItemSelectable()instanceof JCheckBox){
        		JCheckBox temp = (JCheckBox)e.getItemSelectable();
        	   fill = temp.isSelected();
        	}
        	else{
        		JRadioButton temp = (JRadioButton)e.getItemSelectable();
        		if(temp == op1) f= 1;
        		else if(temp == op2) f= 2;
        		else if(temp == op3) f= 3;
        		else if(temp == op4) f= 4;
        		
        	}
        }
        public static void main(String args[]){
        	JFrame.setDefaultLookAndFeelDecorated(true);
        	Font font = new Font("JFrame",Font.PLAIN,14);
            DrawFigure mainFrame = new DrawFigure();
        }
}

⌨️ 快捷键说明

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