1. 类如何定义?类中可以定义哪些?
public class 类名{}
主函数定义为public static
类中可以定义类的属性和方法
系统会自动生成一个默认的构造函数,若想在生成对象时带参数,则重载构造函数
属性一般定义为 private ,static是为了让属性能直接用类名调用
方法一般定义为public
public类名必须和文件名相同
public class Student {
/*
* 无参构造函数
*/
public Student(){}
/*
* 带name的构造函数
*/
public Student(String s){name=s;}
/*
* 学生的姓名属性
*/
private String name;
/*
* 学生的学分属性
*/
private int score;
public void print(){
System.out.println(name+"玩的不亦乐乎");
}
|
类中定义了具体对象所共有的属性和方法,类可以生成具体的对象
类是一个自定义的类型
public static void main(String args[]){
Student stu = new Student();
stu.print();
}
3. 构造器与普通方法
创建某个类的对象时,格式:类名 变量名 = new 类名()这里的类名()就是构造器方法
重新定义构造器方法就叫构造器方法的重载,代码如下
/*
* 无参构造函数
*/
public Student(){}
/*
* 带name的构造函数
*/
public Student(String s){name=s;}
|
在一个类中可以定义多个同名,但是参数类型和数量不同的方法叫方法的重载
public class UNstudent extends Student{
/**
* 改写父类的study 方法
*/
public void study(){
System.out.print("大学生担心挂科");
}
}
|
2. this关键字
this在类中用来指代当前调用该方法的对象
public loginlistener(JTextField jt1,JPasswordField jt2){
this.jt1 = jt1;
this.jt2 = jt2;
}
|
在构造器中可以调用构造器
3. 构造器方法和一般方法的区别
1) 构造器方法没有任何返回值的定义
2) 构造器方法是在创建对象的时候自动调用的
1. 框架
///////////////drawFrame//////////////////////
在窗体上建立:
1.菜单栏JMemubar
//加一个jmenubar
javax.swing.JMenuBar bar = new javax.swing.JMenuBar();
this.setJMenuBar(bar);
//加菜单
javax.swing.JMenu jm1 = new javax.swing.JMenu("文件 ");
javax.swing.JMenu jm2 = new javax.swing.JMenu("编辑 ");
javax.swing.JMenu jm3 = new javax.swing.JMenu("查看 ");
//给菜单条加菜单
bar.add(jm1);
bar.add(jm2);
bar.add(jm2);
|
2.工具面板toolpanel
3.颜色面板 colorpanel
4.中间面板centerpanel
在centerpanel上建立:
5.画板面板drawpanel
//在centerpanel里加一个drawpanel
javax.swing.JPanel drawpanel = new javax.swing.JPanel();
centerpanel.add(drawpanel);
是在centerpanel上再加面板drawpanel
|
在窗体上设置
6.设置布局管理器
//给centerpanel加布局管理器
java.awt.FlowLayout centerlay = new java.awt.FlowLayout(java.awt.FlowLayout.LEFT);
centerpanel.setLayout(centerlay);
布局管理器的建立方法
|
7.设置监听器
在窗体上获取
8.画布
2. 功能
1)画直线
public class Line extends Shape{
Line(int x1,int y1,int x2,int y2,Color color){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.color = color;
}
public void draw(Graphics g) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
取到形状及颜色 绘出直线
|
2)画矩形
3)画椭圆
4)画圆角矩形
3. 关键点
1)如何在两个类中公用一个对象
/**
* 如何在两个类中共用同一个对象
* 为了把另一个类中的对象JTxtFild用到另一个类中 就要在该类中设置参数jt1来接收这个对象
* 所以就需要重载构造函数public loginlistener(JTextField jt1,JPasswordField jt2)
* 来把这个对象JTxtFild 传进来
* 然后才能在类的方法里用到这个共用的对象
*/
|
2)shape多态实现
shape是抽象类 各种形状都继承shape
shape有一个未定义的方法draw
public abstract void draw(java.awt.Graphics g);
|
直线类重写draw
public void draw(Graphics g) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
|
在listener里
sh =new Line(x1,y1,x2,y2,color);//创建直线形状
|
//把图形画出来
sh.draw(g);
|
用父类的对象调用子类方法是实现了多态
3)重绘队列
首先明确在frame里重绘,而队列是在listener里建立,如何从listener到frame呢?
在frame里实例化队列对象
MyQueue<Shape> shapes= new MyQueue<Shape>();
|
然后通过listener 的构造函数传入
//给画布加鼠标监听器
DrawListener dlis = new DrawListener(g,Group1,Group2,shapes);
|
然后在listener里面改变 因为对象是传引用的 所以在listener里改变shapes ,frame里的shapes也会随之改变
最后通过遍历队列
Class MyPanel extends JPanel {
/**
* 重写JPanel中用来绘制窗体的方法
*/
public void paint(Graphics g) {
// 调用父类的方法来正确的绘制窗体
super.paint(g);
System.out.println("绘制了");
// 遍历形状队列
for (int i = 0; i < shapes.size(); i++) {
// 取出形状
Shape sh = shapes.get(i);
// 绘制
sh.draw(g);
}
}
}
|
这里为什么要重建一个MyPanel 因为我们获取画布只需要在drawpanel上 而如果直接在frame中重写paint方法,则是在整个窗体上获取画布,浪费资源所以这里drawpanel建立时有一点小技巧
javax.swing.JPanel drawpanel = new MyPanel();
|
4)事件监听机制的理解
/**
* 事件监听机制的理解
* 在这个例子中 监听器是放在登录按钮上
* 从安装上监听器开始,监听器始终处于工作状态(即建立好监听器对象)
* 知道按下登录按钮 监听器对象开始自动调用方法 实现它的功能
*/
|
4. 错误点
先将其变成图标建立图标对象 图标->标签->标签加到窗体
javax.swing.ImageIcon icon2 = new javax.swing.ImageIcon("qq2.jpg");
// 把图片插入
JLabel secPic = new JLabel(icon2,JLabel.CENTER);
// 错点1:创建图标标签 要传入图标作为参数
jf.add(secPic); // 错点2:left是jlabel的静态变量所以要用类名调用
// 错点3:是要把流式布局管理器左对齐 因为图片在label里
|
/**
* 1. Dimension这个类是设置组件的宽度和高度
* setsize是设置窗体jframe的 设置其他组件的size都是用这个类
* 具体实现是
* //先建立一个dimension对象
* Dimension dim = new Dimension(90,20);
* //然后在这个组件里有一个方法叫 setPreferredSize 就可以设置组件的大小了
* box.setPreferredSize(dim);
* drawpanel.setPreferredSize(new Dimension(500,350));
|
/**
* 2.错点: 加菜单条JMenuBar上去的时候
* 是加到窗体上 jf.setJMenuBar(bar);
* 有专门的语句 而不是加组件的 add
*/
|
public class loginlistener implements java.awt.event.ActionListener{
/*
* 定义账号和密码 用来承接 输入的账号和密码
*/
private JTextField jt1;
private JPasswordField jt2;
/*
* 改写他的构造函数
*/
public loginlistener(JTextField jt1,JPasswordField jt2){
this.jt1 = jt1;
this.jt2 = jt2;
}
/*
*实现 ActionListener里的方法
*/
public void actionPerformed(ActionEvent e) {
/*
* 调用文本输入框的gettext函数 来得到 输入的账号和密码
*/
String name = jt1.getText();
String pwd = jt2.getText();
/*
* 打印账号和密码到java界面上
*/
System.out.print("账号:"+name+"\n"+"密码:"+pwd);
}
|
/**
* 难点1:监听器里的方法在创建对象的时候就自动调用了
* 难点2:ActionEvent e暂时还没有用到
* 难点3:要获得文本区域输入的文字 就要用文本对象来调用gettext
* 难点4:因为txtfild 和 passfild都是login.java里的 所以为了在这里使用只能重载构造函数
* 难点5:这里的jt1 和jt2 分别是 JTextField JPasswordField类型 而非 string类型
* 因为 我们是在 单击这个登录按钮的时候 才将 内容传入并打印出来的
* 若 在构造函数中 直接设成 string类型 则表明 把监听器 安到按钮上去的时候 内容就传进来了
*/
|
分享到:
相关推荐
java画图板java画图板java画图板
用java实现的windows画图板的简单模式,对于java初学者的事件触发器学习有很好的帮助。。。
java+swing+画图板Java实用源码整理learns
利用Java写的简易画图板,包括直线、铅笔、圆形、矩形、橡皮以及修改颜色、线形大小和虚实。
JAVA实现简单的画图板JAVA实现简单的画图板JAVA实现简单的画图板JAVA实现简单的画图板
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
简易画图板。有基本形状绘制,加铅笔和橡皮,可撤销清除。可保存打开。
基于JAVA语言的画图板,代码齐全,能够运行
JAVA课程设计-画图板(含文档、源码)
java swing 实现的仿照win的画图板,欢迎交流学习
NULL 博文链接:https://xiaoyjj.iteye.com/blog/1702155
Java画图板Java画图板Java画图板Java画图板Java画图板
一个用Java实现的画图板程序~一个用Java实现的画图板程序~一个用Java实现的画图板程序~一个用Java实现的画图板程序~
java 画图板 课程设计
java大作业--画图板。可以绘图(包含铅笔工具及多种形状)、调色、调节笔头粗细和形状、橡皮、吸管、保存图片、打开图片、剪切、复制、粘贴、撤销。
JAVA课程设计-画图板(含文档、源码)源码整理
java课程设计的一个题目。本程序可以画各种函数曲线,功能有: 1.新建、打开、保存画图 2.多种方式输入函数作图 3.可设置画笔颜色、大小 4.可以放大、缩小 5.可以移动坐标和图像 6.实时显示鼠标经过的坐标 jar使用:...
用java写的画图板程序,其中包括话曲线,直线,圆,等等基本的功能。
本程序完成的是一个类似于Windows画图板的画图程序,由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建 2.打开或保存 3.绘制一些基本的图形组件 4.用鼠标在绘图板上单击...