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