`

基本图形工具和颜色设置

 
阅读更多
应用小结
设置线条粗细时,可以通过较多的线条的累积实现;
通过对颜色的设置,尤其是颜色过渡,可以使图形出现立体的效果;
对于陌生的类或方法,可通过查看源代码学习;
使每次画图时画布清空,可用clearRect()方法;
设置画布上字体时可用setFont()方法<此方法在Graphics类中为抽象方法>;
可通过方法drawString()给图形标注汉字;


以下是对基本图形工具使用的代码和所画的图形












import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class Test {

	/**
	 * @param chenlin
	 * 定义一个主函数入口
	 */
	public static void main(String[] args) {
		// 实例化一个Test类的对象
		Test t = new Test();
        //调用方法showPicture
		t.showPicture();
	}
	
	/**
	 * 声明方法showPicture
	 */
     public void showPicture(){
    	 //实例化一个JFrame类的窗体
    	 JFrame jf = new JFrame();
    	 //设置窗体大小
    	 jf.setSize(1366, 736);
    	 jf.setLayout(new FlowLayout());
    	 //设置窗体打开时的位置居中
    	 jf.setLocationRelativeTo(null);
    	 //设置窗体关闭时退出程序
    	 jf.setDefaultCloseOperation(3);
    	 //实例化面板,用来装按钮
    	 JPanel p2 = new JPanel();
    	 JPanel p3 = new JPanel();
    	 //设置面板大小
    	 p2.setPreferredSize(new Dimension(1366,35));
    	 p3.setPreferredSize(new Dimension(1366,35));
    	 //实例化按钮
    	 JButton ball=new JButton("球");
    	 JButton b7=new JButton("彩色三角形");
    	 JButton b8=new JButton("彩色圆形");
    	 JButton b9=new JButton("彩色矩形");
    	 JButton b10=new JButton("彩色线条");
    	 //实例化三个滑块,分别表示红、绿、蓝
    	 JSlider slr=new JSlider();
    	 JSlider slg=new JSlider();
    	 JSlider slb=new JSlider();
    	 //设置滑块最大值
    	 slr.setMaximum(255);
    	 slg.setMaximum(255);
    	 slb.setMaximum(255);
    	 //设置滑块的默认值
    	 slr.setValue(222);
    	 slg.setValue(222);
    	 slb.setValue(222);
    	 //把按钮添加到窗体上
    	 jf.add(p2);
    	 jf.add(p3);
    	 p2.add(ball);
    	 p2.add(b7);
    	 p2.add(b8);
    	 p2.add(b9);
    	 p2.add(b10);
    	 //添加滑块和标签
    	 p3.add(new JLabel("R"));
    	 p3.add(slr);
    	 p3.add(new JLabel("G"));
    	 p3.add(slg);
    	 p3.add(new JLabel("B"));
    	 p3.add(slb);
    	 //设置窗体可见
    	 jf.setVisible(true); 	 
    	 //调用窗体的画布
    	 Graphics g = jf.getGraphics();
    	 //实例化一个鼠标处理事件类的对象
    	 cl.tool_color0327.MouseActionListener mal=new cl.tool_color0327.MouseActionListener(g,slr,slg,slb);
    	 //给按钮添加动作监听器
    	 ball.addActionListener(mal);
    	 b7.addActionListener(mal);
    	 b8.addActionListener(mal);
    	 b9.addActionListener(mal);
    	 b10.addActionListener(mal);
    	 //给滑块添加监听器
    	 slr.addChangeListener(mal);
    	 slg.addChangeListener(mal);
    	 slb.addChangeListener(mal);
    	 //给窗体添加鼠标监听器
    	 jf.addMouseListener(mal);
     }
}


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MouseActionListener implements ActionListener,MouseListener,ChangeListener{
    /**
     * 声明属性
     * 用g传递画布地址,s1、s2、s3传递传递三个滑块的地址
     */
	private Graphics g;
	private JSlider s1;
	private JSlider s2;
	private JSlider s3;
	private Color color;
	private String str;
    private int x1,y1,x2,y2,v1,v2,v3;
	public MouseActionListener(Graphics g,JSlider s1,JSlider s2,JSlider s3){
		this.g=g;
		this.s1=s1;
		this.s2=s2;
		this.s3=s3;
	}
	//实现ActionListener中的抽象方法
	public void actionPerformed(ActionEvent e) {
		//用str存储按钮上的值
		 str=e.getActionCommand();
		 System.out.println(str);
	}
	//实现MouseListener中的抽象方法
	public void mouseClicked(MouseEvent e) {
		
	}
	public void mousePressed(MouseEvent e) {
		x1=e.getX();//获得鼠标按下时点的横坐标
		y1=e.getY();//获得鼠标按下时点的纵坐标
	}
	public void mouseReleased(MouseEvent e) {
		x2=e.getX();//获得鼠标释放时点的横坐标
		y2=e.getY();//获得鼠标释放时点的纵坐标
		g.setFont(new Font(null, 30, 30));//设置字体
		
		/**
		 * 根据选择的按钮,绘制不同的图案
		 */
		if(str.equals("彩色三角形")){
			//每次画图案时,画布清空
			g.clearRect(0, 0, 1366, 736);
			g.drawString("——from陈琳", x1, y1);
			   int q=0,m=0,n=255,x=0,y=0;
				for(int i=0;i<100000;i++){
					//随着三角形层次的增多,设置颜色的渐变
					if(150+i*5<255){color=new Color(150+i*5,0,0);	
					}else if(m<222){
					m=m+5;
					color=new Color(222,m,0);
					}else if(n>120){
						n=n-5;
						color=new Color(0,n,0);
					}else if(x<120){
						x=x+5;
						color=new Color(x,x,220);
					}else if(y<120){
						y=y+5;
						color=new Color(y,111,187);
					}
	        	  g.setColor(color);	
			      g.drawLine(x1/2+x2/2, y1+q, x1+q*2, y2-q/2);
			      g.drawLine(x1/2+x2/2, y1+q, x2-q*2, y2-q/2);
			      g.drawLine(x1+q*2, y2-q/2, x2-q*2, y2-q/2);
			      q++;
			      //当三角形三点的坐标超出边界时退出循环
			      if(y1+q>y1/2+y2/2||x1+q*2>x1/2+x2/2||
			    		  y2-q/2<y1/2+y2/2||x2-q*2<x1/2+x2/2)break;
						   }
        }else if(str.equals("彩色圆形")){
        	//每次画图案时,画布清空
        	g.clearRect(0, 0, 1366, 736);
        	g.drawString("——from陈琳", x1, y1);
        	for(int i=0;i<30;i++){
        		int x3,y3,x4,y4;
        	   g.setColor(new Color(v1-10*i,v2-10*i,v3-10*i));	
        	   g.fillOval(x1, y1, Math.abs(x2-x1), Math.abs(y2-y1));
        	   x3=x1+Math.abs(x2/5-x1/5);
        	   y3=y1+Math.abs(y2/5-y1/5);
        	   x4=x2-Math.abs(x2/5-x1/5);
        	   y4=y2-Math.abs(y2/5-y1/5);
        	   x1=x3;
        	   x2=x4;
        	   y1=y3;
        	   y2=y4;
        	   //当有一种颜色的RGB值小于零时退出循环
        	   if(v1<0||v2<0||v3<0)break;
        	} 
         }else if(str.equals("彩色矩形")){
        	//每次画图案时,画布清空
        	 g.clearRect(0, 0, 1366, 736);
        	 g.drawString("——from陈琳", x1, y1);
        	 for(int i=0;i<30;i++){
         		int x3,y3,x4,y4;
         	   g.setColor(new Color(v1-10*i,v2-10*i,v3-10*i));	
         	   g.fillRect(x1, y1, Math.abs(x2-x1), Math.abs(y2-y1));
         	   x3=x1+Math.abs(x2/10-x1/10);
         	   y3=y1+Math.abs(y2/10-y1/10);
         	   x4=x2-Math.abs(x2/10-x1/10);
         	   y4=y2-Math.abs(y2/10-y1/10);
         	   x1=x3;
         	   x2=x4;
         	   y1=y3;
         	   y2=y4;
         	  //当有一种颜色的RGB值小于零时退出循环
         	   if(v1<0||v2<0||v3<0)break;
        	 }
          }else if(str.equals("彩色线条")){
        	//每次画图案时,画布清空
        	  g.clearRect(0, 0, 1366, 736);
            	g.drawString("——from陈琳", x1, y1);
        	  int m=0,n=255,x=0,y=0;
        	  for(int i=0;i<100000;i++){
					if(150+i*5<255){color=new Color(150+i*5,0,0);	
					}else if(m<222){
					m=m+5;
					color=new Color(222,m,0);
					}else if(n>120){
						n=n-5;
						color=new Color(0,n,0);
					}else if(x<120){
						x=x+5;
						color=new Color(x,x,220);
					}else if(y<120){
						y=y+5;
						color=new Color(y,111,187);
					}
					g.setColor(color);
					g.drawLine(x1/2+x2/2-i,y1,x1/2+x2/2+i,y1);
					y1=y1+1;
					if(x1/2+x2/2-i<x1||x1/2+x2/2+i>x2)break;
        	  }
          }else if(str.equals("球")){
        	//每次画图案时,画布清空
        	  g.clearRect(0, 0, 1366, 736);
          	g.drawString("——from陈琳", x1, y1);
        	  for(int i=0;i<50;i++){
        		  if(i<7){
        			  g.setColor(new Color(0,75-i*5,0));
        			  g.fillOval(x1, y1, 300-i*5, 300-i*5);
                	  x1=x2+5;
        		  }else if(i<12){
        			  g.setColor(new Color(0,45,0));
        			  g.fillOval(x1, y1, 300-i*5, 300-i*5);
                	 y1=y1+1;
                	  x1=x2+5;
        		  }else{g.setColor(new Color(0,25+i*2,0));}
        	  g.fillOval(x1, y1, 300-i*5, 300-i*5);
        	  y1=y1+2;
        	  x1=x2+16;
        	  }
    	 }
		
	}
	public void mouseEntered(MouseEvent e) {
		
	}
	public void mouseExited(MouseEvent e) {
		
	}
	//实现ChangeListener的抽象方法
	public void stateChanged(ChangeEvent e) {
		v1=s1.getValue();
		v2=s2.getValue();
		v3=s3.getValue();
		
	}

}
  • 大小: 1000 Bytes
  • 大小: 74.3 KB
  • 大小: 12.7 KB
  • 大小: 9.9 KB
  • 大小: 10.2 KB
  • 大小: 15.2 KB
分享到:
评论
2 楼 convolute 2013-04-02  
1 楼 javafound 2013-04-02  

相关推荐

    获取屏幕颜色的小工具

    总而言之,“获取屏幕颜色的小工具”是数字创意和设计领域中不可或缺的工具之一。它简化了颜色获取和应用的过程,提升了工作效率,确保了色彩的精确度。随着技术的更新迭代,新版本的推出无疑将进一步增强用户体验,...

    OpenGL里面的一些颜色设置和图形绘制用的函数

    OpenGL是一种强大的图形库,用于在各种操作系统和...总的来说,OpenGL的颜色设置和图形绘制功能提供了丰富的工具,让开发者能够自由地创造和展示复杂的视觉场景。掌握这些基础知识是成为熟练的OpenGL程序员的关键步骤。

    颜色拾取工具,前端必备

    首先,让我们详细了解一下颜色拾取工具的基本工作原理。颜色拾取工具通常会集成RGB(红绿蓝)和HSV(色相、饱和度、亮度)等色彩模型,以便用户可以根据不同的需求选择合适的色彩空间。在屏幕拾取模式下,用户只需将...

    物理作图工具

    综上所述,物理作图工具是提升物理教学效果的重要辅助手段,它通过提供丰富的图形绘制和编辑功能,帮助教师更好地传授物理知识,激发学生的学习兴趣。"word画图"可能是其中一种工具的名称,尽管Word本身具有基本的...

    ARGB颜色调制转换工具

    ARGB颜色调制转换工具是一种专业且实用的软件,它专为处理颜色值而设计,尤其是在数字图像处理和计算机图形学领域。ARGB是Alpha、Red、Green、Blue四种颜色通道的缩写,这种颜色模式在许多编程语言和图形应用程序中...

    颜色拾取工具.rar

    颜色拾取工具是图形设计和开发领域中常用的一种实用程序,它可以帮助用户精确地选取屏幕上的任何颜色,并将其转化为可使用的色彩代码。这样的工具对于设计师、程序员或任何需要精确控制颜色的人而言,都是必不可少的...

    屏幕颜色抓取工具,一个绿色小巧的颜色抓取工具

    这些颜色代码可以在图形设计软件、网页开发工具等多种场景中使用,从而实现颜色的精确匹配和应用。 "屏幕颜色抓取工具"的优势在于它的绿色特性,即无需安装即可使用。对于不喜欢在系统中安装过多软件的用户来说,这...

    小巧方便的颜色吸管工具

    颜色吸管工具是一种在计算机图形设计和网页设计领域中广泛使用的实用工具,它允许用户从屏幕上选取任何颜色,以便在设计工作中精确地匹配或复制这些颜色。这种工具因其小巧、便捷的特点深受设计师们的喜爱。在本篇...

    取色工具 吸取颜色

    除了基本的取色功能,一些高级的颜色选取工具还可能包含额外的功能,比如调色板管理、历史记录查看、颜色对比度检查等。"取色工具 吸取颜色"虽然文件体积小,但很可能也包含了这些实用特性,使得用户在日常工作中能...

    Color_HSV_颜色工具_

    在计算机图形学和图像处理领域,颜色模型是表示颜色的重要方式,HSV(Hue, Saturation, Value)颜色模型就是其中的一种。HSV,又称HSB(Hue, Saturation, Brightness),它以一种更加直观的方式来表示颜色,与常见的...

    十进制十六进制颜色转换工具

    在计算机科学和图形设计领域,颜色的表示方式多种多样,其中最常见的两种是十进制和十六进制。本文将深入探讨十进制和十六进制颜色系统,以及它们之间的转换方法,尤其关注“十进制十六进制颜色转换工具”的应用。 ...

    as3中设置图形的颜色

    总结起来,AS3中设置图形颜色的方式多样,可以根据需求选择合适的工具。对于已生成的图形,可以通过重新绘制或使用`BitmapData`的`setPixel()`函数进行像素级操作。希望这些信息能帮助你在AS3项目中更自如地处理图形...

    C#绘图程序(winform),含线条,矩形,圆等,多边形,椭圆等基本图形,可以填充图形,可以换颜色,可以移动,可以调整画笔粗细

    在本文中,我们将深入探讨如何使用C# WinForm来创建一个功能丰富的图形绘制程序,它包含绘制线条、矩形、圆、多边形和椭圆等基本图形的能力,并且允许用户进行填充图形、更换颜色、移动图形以及调整画笔粗细。...

    颜色获取工具

    颜色获取工具是一款非常实用的...对于前端开发者来说,它可以帮助调试CSS样式,尤其是在处理背景颜色、边框颜色和文本颜色时。总的来说,这款工具是IT行业中不可或缺的辅助工具,大大提升了专业人士的颜色管理效率。

    VS2015MFC图形系统开发(基本图形绘制线型颜色)

    在本文中,我们将深入探讨如何使用Visual Studio 2015中的MFC(Microsoft Foundation Classes)框架开发一个简单的图形系统,特别关注基本图形的绘制、线宽、颜色和线型的设置。MFC是一个C++类库,它为Windows应用...

    RGB颜色值与十六进制颜色码转换工具.zip

    总的来说,这个压缩包提供的工具旨在帮助用户快速、准确地进行RGB和十六进制颜色码的转换,对于从事数字媒体、网页设计或UI设计等相关工作的人员来说,无疑是一个实用的辅助工具。通过熟练运用这个工具,可以提升...

    像素颜色抓取工具

    该工具不仅提供基本的像素颜色抓取,还具有将自定义RGB颜色转换为纯色图片的功能。这意味着用户不仅可以快速获取屏幕上的颜色代码,还可以根据需要创建定制的颜色样本图片,这对于设计工作、网页开发、软件界面设计...

    颜色和标尺工具

    在IT行业中,颜色和标尺工具是网页设计和前端开发不可或缺的部分。它们帮助设计师和开发者精确地控制页面布局,确保视觉效果的准确性和一致性。在这个主题中,我们将深入探讨颜色选取、度量标准以及相关工具的使用。...

    图形学综合性实验,基本画图工具

    在“NewDraw”这个可能的画图工具中,学生可能需要学习如何初始化渲染上下文,设置颜色和深度缓冲,以及如何使用顶点数组或顶点着色器来绘制基本形状。此外,了解坐标系统、向量和矩阵运算也是必不可少的基础,因为...

    实训1:颜色和渐变应用.zip

    Flash,作为一款曾经广泛用于创建交互式矢量图形、动画和网页内容的工具,对颜色和渐变的掌握对于设计师和开发人员来说是基础技能。 颜色在视觉设计中扮演着关键角色,它可以传达情感、设定氛围,并帮助引导用户...

Global site tag (gtag.js) - Google Analytics