java绘图坐标体系.docx
《java绘图坐标体系.docx》由会员分享,可在线阅读,更多相关《java绘图坐标体系.docx(9页珍藏版)》请在冰豆网上搜索。
![java绘图坐标体系.docx](https://file1.bdocx.com/fileroot1/2022-10/27/846d8637-a0c5-4c55-a9f3-4481374ad642/846d8637-a0c5-4c55-a9f3-4481374ad6421.gif)
java绘图坐标体系
java绘图坐标体系
像素:
计算机屏幕上显示的内容都是屏幕上的每一个像素组成。
例如:
计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。
像素是一个密度单位,而厘米是长度单位,两者无法比较。
绘图的原理Part1
Component类提供了两个和绘图相关最重要的方法:
①:
paint(Graphicsg):
绘制组件的外观
注意点:
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。
在以下情况会自动调用paint()方法:
一:
窗口最小化,再最大化。
二:
窗口的大小发生变化(注意是大小变化,而不是移动窗口)
三:
repaint函数被调用
②:
repaint():
刷新组件的外观
注意点:
起到动感的作用。
Graphics类:
Graphics可以理解就是画笔,为我们提供各种绘制图形的方法:
①:
画直线 drawLine(intx1,inty1,intx2,inty2);
②:
画矩形边框 drawRect(intx,inty,intwidth,intheight);
③:
画椭圆边框 drawOval(intx,inty,intwidth,intheight);
④:
填充矩形 fillRect(intx,inty,intwidth,intheight);
⑤:
填充椭圆 fillOval(intx,inty,intwidth,intheight);
⑥:
画图片 drawImage(Imageimg,intx,inty,.....);
⑦:
画字符串 drawString(Stringstr,intx,inty);
⑧:
设置画笔的字体 setFont(Fontfont);
⑨:
设置画笔的颜色 setColor(Colorc);
举例如下:
/**
*java绘图原理
*不能再JFrame上画图,但是可以在JPanel上画图
*/
packageday0218;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Panel;
importjava.awt.Toolkit;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassDemo18_1extendsJFrame{
MyPanelmp=null;
public Demo18_1(){
mp=newMyPanel();
this.add(mp);
this.setSize(800,800);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
Demo18_1demo18_1=newDemo18_1();
}
}
//定义一个MyPanel(是我自己的面板,是用于绘图和显示绘图的区域)
classMyPanelextendsJPanel{
//覆盖JPanel的paint方法
//Graphics是绘图的重要类,你可以把他理解成一只画笔(可以画各种各样的)
publicvoidpaint(Graphicsg){
//调用父类函数完成初始化(这句话不能少,现在似乎可以不加,最好加上)
super.paint(g);
// //画一个圆
// g.drawOval(20,20,40,40);
// //g.drawOval(70,20,40,40);
//
// //画出直线
// g.drawLine(40,40,90,90);
//
// //画出矩形边框
// g.drawRect(100,100,50,30);
//画出填充矩形
//设置颜色,若每次颜色不一样,每次都要设置
// g.setColor(Color.green);
// g.fillRect(150,150,60,80);
// g.setColor(Color.yellow);
// g.fillRect(250,250,60,80);
//
// //在面板上画出图片(要先准备张图片)
// Imageim=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/33.jpg"));
// //显示图片this指的是这里的JPanel
// g.drawImage(im,90,90,356,521,this);
//设置画笔的颜色
// g.setColor(Color.PINK);
// g.setFont(newFont("华文琥珀",Font.BOLD,55));
// //如何画字
// g.drawString("林峰万岁",100,200);
}
}
java事件处理机制
采取的是“委派事件模型”,是指当事件发生(比如按了鼠标,按了键盘)的时候,产生事件的对象(即事件源),会把此信息传递给事件的监听者处理的一种方式,而这里所说的信息实际上就是java.awt.evebt事件类库里某个类所创建的对象,我们暂时称之为事件的对象。
小练习:
点击不同的按钮,让面板的背景色发生相应的变化。
代码如下:
/**
*讲解java中的事件处理机制
*理解:
一个事件可以被多个类监听的
*
*一个类要实现监听的步骤
*1.实现相应的接口(KeyListener、MouseListener、ActionListener、WindowListener)
*2.把接口的处理方法根据需要重新编写(Override)
*3.在事件源注册监听
*4.时间传递是靠事件对象
*/
packageday0218;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassShijianextendsJFrameimplementsActionListener{
privatestaticfinallongserialVersionUID=1L;
//定义
JPaneljp=null;
JButtonjb1,jb2;
publicShijian(){
jp=newJPanel();
jb1=newJButton("黑色");
jb2=newJButton("红色");
this.add(jb1,BorderLayout.NORTH);
jp.setBackground(Color.gray);
this.add(jp);
this.add(jb2,BorderLayout.SOUTH);
Catmycat=newCat();
//注册监听
jb1.addActionListener(this);
jb1.addActionListener(mycat);
//指定action命令
jb1.setActionCommand("aa");
jb2.addActionListener(this);
jb2.setActionCommand("bb");
this.setSize(300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
Shijiansj=newShijian();
}
@Override
publicvoidactionPerformed(ActionEvente){
//判断是哪个按钮被点击
if(e.getActionCommand().equals("aa")){
// System.out.println("点击了黑色");
jp.setBackground(Color.black);
}elseif(e.getActionCommand().equals("bb")){
// System.out.println("点击了红色");
jp.setBackground(Color.red);
}
}
}
//若要让猫类监听,那么也要注册监听
classCatimplementsActionListener{
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
if(arg0.getActionCommand().equals("aa")){
System.out.println("猫猫也知道你按了黑色按钮");
}elseif(arg0.getActionCommand().equals("bb")){
System.out.println("猫猫也知道你按了红色按钮");
}
}
}
//classMyPanelextendsJPanel{
//
//publicvoidpaint(Graphicsg){
//super.paint(g);
//
//}
//
//}
小练习:
怎么让小球受到键盘的控制,上下左右移动。
代码如下:
/**
*加深对事件处理机制的理解
*通过上下左右键,来控制小球的位置
*
*我自我感觉是谁实现了监听的,就是在注册监听中被监听的
*/
packageday0218;
importjava.awt.Graphics;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassShijian2extendsJFrame {
MyPanelmp=null;
pu