P570~P572
import javax.swing.*;
import java.awt.*;
public class DrawCircle extends JFrame {//JFrame对应窗口,可以理解成是一个画框
//定义一个面板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
}
public DrawCircle() {
//初始化面板
mp = new MyPanel();
//把面板放入到窗口
this.add(mp);
//设置窗口大小
this.setSize(400, 300);
//点击窗口关闭,程序真正退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置显示窗口
this.setVisible(true);
}
}
class MyPanel extends JPanel {
//说明
//MyPanel,理解成一个画板
//Graphics g,g是一个画笔
//Graphics提供很多方法
@Override
public void paint(Graphics g) {//Graphics绘图
super.paint(g);//调用父类方法完成初始化
System.out.println("paint被调用");
g.drawOval(10, 10, 100, 100);
}
}
当组件第一次在屏幕显示的时候,程序会自动调用paint()方法来绘制组件
以下情况paint()会被调用:
Graphics类,理解成画笔,为我们提供绘图方法
import javax.swing.*;
import java.awt.*;
public class GraphicsMethod extends JFrame {
private MyPanel2 mp = null;
public GraphicsMethod(){
mp=new MyPanel2();
this.add(mp);
this.setSize(300,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GraphicsMethod();
}
}
class MyPanel2 extends JPanel{
@Override
public void paint(Graphics g) {
super.paint(g);
// 1. drawLine(int x1,int y1,int x2,int y2):画直线
g.drawLine(0,0,50,50);
// 2. drawRect(int x1,int y1,int width,int height):画矩形边框
g.drawRect(50,0,50,50);
// 3. drawOval(int x1,int y1,int width,int height):画椭圆边框
g.drawOval(100,0,50,50);
// 4. fillRect(int x1,int y1,int width,int height):填充矩形
g.fillRect(150,0,50,50);
// 5. fillOval(int x1,int y1,int width,int height):填充椭圆
g.setColor(Color.orange);
g.fillOval(200,0,50,50);
// 6. drawImage(Image img,int x,int y):画图片
//获取图片资源
Image image=Toolkit.getDefaultToolkit().getImage(MyPanel2.class.getResource("bg.jpg"));
g.drawImage(image,100,100,this);
// g.drawImage
// 7. drawString(String str,int x,int y):画字符串
// 8. setFont(Font font):设置画笔字体
g.setFont(new Font("黑体",Font.BOLD,50));
g.drawString("12345",0,60);//对应字体左下角
// 9. setColor(Color c):设置画笔颜色
}
}
java事件采取“委派事件模型”,当事件发生时,产生事件的对象,会把信息传递给事件的监听者处理,这里说的事件是java.awt.event事件类库里某个类所创建的对象,把它称为事件的对象
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class BallMove extends JFrame {
MyPanel3 mp=null;
public BallMove(){
mp = new MyPanel3();
this.add(mp);
//JFrame可以监听键盘事件
this.addKeyListener(mp);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new BallMove();
}
}
//keylistener监听键盘
class MyPanel3 extends JPanel implements KeyListener {
int x=10;
int y=10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x,y,20,20);
}
//有字符输出时该方法就会触发
@Override
public void keyTyped(KeyEvent e) {
}
//当某个键按下时该方法触发
@Override
public void keyPressed(KeyEvent e) {
System.out.println((char)e.getKeyCode()+"被按下");
//根据用户按下的不同键处理移动
if(e.getKeyCode()== KeyEvent.VK_DOWN){
y++;
}else if (e.getKeyCode()== KeyEvent.VK_UP){
y--;
}else if (e.getKeyCode()== KeyEvent.VK_LEFT){
x--;
}else if (e.getKeyCode()== KeyEvent.VK_RIGHT){
x++;
}
this.repaint();
}
//当某个键释放时该方法触发
@Override
public void keyReleased(KeyEvent e) {
}
}