![]()
![]()
import java.awt.*; //存放了Graphics
import javax.swing.*; //JFrame所在,包含以许多J开头的控件
import java.awt.event.*; //各种“事件”
public class SimpleGui3C implements ActionListener {
JFrame frame;
public static void main(String[] args) {
SimpleGui3C gui = new SimpleGui3C(); //创建主类
gui.go(); //调用GUI函数
}
public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这一行程序会在window关闭时把程序结束掉
JButton button = new JButton("Change colors"); //创建带文本的按钮控件
button.addActionListener(this); //将一个 ActionListener 添加到按钮中this指监听器就是本身
MyDrawPanel drawPanel = new MyDrawPanel();
frame.getContentPane().add(BorderLayout.SOUTH, button); //JFrame可分为5个部分,
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
frame.setSize(300, 300); //设置窗体大小
frame.setVisible(true); //设置控件为显示状态
}
public void actionPerformed(ActionEvent event) {
frame.repaint(); //重绘此组件。如果此组件是轻量级组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。
} //将实现的接口内的方法覆盖掉
}
class MyDrawPanel extends JPanel {
/*
创建JPanel的子类并覆盖掉paintComponent()这个方法。
所有的绘图程序代码都在paintComponent()里面。
当你的panel所处的frame显示的时候,paintComponent()就会被调用。
如果用户缩小window或选择最小化,java虚拟机也会知道要调用它来重置
你不能自己调用这个方法,它的参数是个跟实际屏幕有观的Graphics对象。
你无法取得这个对象,它必须由系统交给你。
你可以调用repaint()来要求系统重新绘制显示装置,然后才会产生paintCompon()的调用
*/
public void paintComponent(Graphics g) {
g.fillRect(0, 0, this.getWidth(), this.getHeight()); //Graphics带有默认颜色,此函数功能是填充指定的矩形
int red = (int)(Math.random() * 225);
int green = (int)(Math.random() * 225);
int blue = (int)(Math.random() * 225);
Color randomColor = new Color(red, green, blue);
g.setColor(randomColor);
g.fillOval(70, 70, 100, 100); //此函数功能是使用当前颜色填充外接指定矩形框的椭圆。
}