小白的JAVA学习笔记(十一)----图形用户接口(2)绘制图形

1、简单绘制图形

//Author: ZJQ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//创建JPanel子类
class DrawPanel extends JPanel{
	public void paintComponent(Graphics g) {
		int red=(int)(Math.random()*255);
		int green=(int)(Math.random()*255);
		int blue=(int)(Math.random()*255);
		Color randomcolor=new Color(red,green,blue);//随机确定颜色
		g.setColor(randomcolor);
		g.fillRect(20, 50, 200, 200);//画长方形,前两个参数是起点坐标,后两个参数代表宽度,高度
		g.fillOval(300, 80, 100, 200);//画椭圆
	}
}
public class Test {
    JFrame frame;
    public void go() {
    	frame=new JFrame();
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	DrawPanel draw=new DrawPanel();
    	frame.getContentPane().add(BorderLayout.CENTER,draw);
    	frame.setSize(700, 700);
    	frame.setVisible(true);
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Test t=new Test();
        t.go();
	}

}
  • 通过创建JPanel子类并覆盖其中的paintComponent()方法来绘制我们想要的图形
  • 绘图程序代码全在paintComponent()方法内,它的参数是跟实际屏幕有关的Graphics对象,必须由系统提供给你,所以这个方法不可以由你自己调用,而是由GUI系统调用,但是还是可以通过repaint()方法要求重新绘制而产生paintComponent()调用
  • 由于g是Graphics对象,通过多态的知识,我们知道g还可能是Graphics的某个子类,实际上,g确实是Graphics2D的实例,但是由于调用的方法是根据引用的类型,而非对象的类型,所以调用Graphic2D的方法时需要类型转换

       Graphics2D g2d=(Graphics2D) g

  • frame默认有5个区域放组件,每个区域只能放一项。frame.getContentPane().add(存放区域,存放组件)方法中add里的两个参数指定使用的区域,如果add里未写明区域,即只有一个参数为组件,则默认为BorderLayout.CENTER

 

2、按下按钮,图形变色

//Author: ZJQ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//创建JPanel子类
class DrawPanel extends JPanel{
	public void paintComponent(Graphics g) {
		Graphics2D g2d=(Graphics2D) g;
		int red=(int)(Math.random()*255);
		int green=(int)(Math.random()*255);
		int blue=(int)(Math.random()*255);
		Color start=new Color(red,green,blue);
		red=(int)(Math.random()*255);
		green=(int)(Math.random()*255);
		blue=(int)(Math.random()*255);
		Color end=new Color(red,green,blue);
		GradientPaint gradient=new GradientPaint(30,30,start,100,100,end);
		//第1,2个参数代表起点,第3个参数代表起始颜色,第4,5个参数代表终点,第6个参数代表渐变层最后的颜色
		g2d.setPaint(gradient);//虚拟笔刷设为渐变层
		g2d.fillOval(30, 30, 100, 100);
	}
}
public class Test implements ActionListener{
    JFrame frame;
    public void go() {
    	frame=new JFrame();
        JButton button=new JButton("click to change");
        button.addActionListener(this);
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	DrawPanel draw=new DrawPanel();
    	frame.getContentPane().add(BorderLayout.SOUTH,button);
    	frame.getContentPane().add(BorderLayout.CENTER,draw);
    	frame.setSize(700, 700);
    	frame.setVisible(true);
    }
    public void actionPerformed(ActionEvent event) {
    	frame.repaint();
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Test t=new Test();
        t.go();
	}

}

                                                                                                                                                     BY   ZJQ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值