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); //此函数功能是使用当前颜色填充外接指定矩形框的椭圆。 }
时间: 2024-10-28 19:39:17