一: java 绘图坐标原点位于左上角,也就是说,绘图区域是在第四象限。
二: 创建一个类(即画板类) 继承 Jpanel ,重写paint( )方法,在该方法里面使用Graphics g 画笔进行绘画。
1. MyPanel 对象就是一个画板
2. Graphics g 把 g 理解成一支画笔
3. Graphics 提供了很多绘图的方法
/画图片 drawImage(Image img, int x, int y, ..)
//1. 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
// Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png")); // g.drawImage(image, 10, 10, 175, 221, this); //不理解可以查API文档
g.setFont(new Font("隶书", Font.BOLD, 50));//设置字体
三:主函数所在的类要继承 JFrame //JFrame 对应窗口,可以理解成是一个画框
然后创建一个主函数所在类的构造器,在里面添加画板类
public DrawCircle() {//构造器,这里的类名就是主函数所在的类,前提要继承 JFrame.
//初始化面板 mp = new MyPanel();
//把面板放入到窗口(画框)
this.add(mp);
//设置窗口的大小
this.setSize(400, 300);
//当点击窗口的小×,程序完全退出.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//可以显示
}
四:绘图原理
两个重要方法: paint(Graphics g) repaint() //刷新组件外观。
注意: repaint() 方法在你重写绘图完以后一定要记得添加!!
多线程
一:线程基本使用
继承 Thread类 或者 Runnable接口 重写两个里面的run()方法。
注意这两个是如何启动 start()方法。
区别:
没有多大区别,但是实现Runnable 接口,更适合,避免java的单继承机制。
二:线程常用方法:
1:setName() 设置线程名字 getName()返回线程名字
start() 启动线程 run()调用线程 run 方法 set或getProiority()设置或得到线程优先级
sleep() 让线程休眠(1000=1秒) interrupt()中断休眠的线程,让其工作
join() 线程插队。插队成功,则会先执行完插入线程的所有任务。
线程状态转换图 (看文档)
三:
线程同步机制:即当有一个线程在对内存进行操作时候,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。
synchronized
1. public synchronized void sell() {} 就是一个同步方法 ,这时锁在 this 对象 , 也可以在代码块上写 synchronize ,同步代码块, 互斥锁还是在 this 对象
2. public synchronized static void m1() {} 锁是加在 SellTicket03.clas 即:同步方法(静态的)的锁为当前类本身
注意避免 死锁。