本人的代码经历仅有一学期的python课程学习,今天第一次接触Java,如果有写的不好的或者不严谨的地方,希望大家多多批评指正!
1 类
关键要素:属性(变量),方法(函数)
在程序实现的过程中需要用到并且会产生很多的数据,我们如果想要把这些数据存储起来,就需要使用到变量。通过何种途径实现目标,则需要使用到方法。
创建类的方法:
public class 类名{
}
1.1 属性(变量)
变量分为全局变量和局部变量,全局变量就是一个变量名在整个程序中都指向一个变量;而局部变量是只在某一个方法中指向一个变量。
变量类型,一开始我以为java中的数据类型和python相似,分为整型,浮点,字符串等,但是查了一下基本数据类型好像不是这几个?这个地方学的不是很明白,希望以后能搞清楚。
变量名,变量名是变量的必备要素。之前听说变量名最好不要使用拼音,查了一下发现应该是拼音容易模糊,因为一个相同的拼音很有可能指代两个不同的意思,造成混淆。
1.2 方法(函数)
方法可以看作是程序的大脑和手,接受输入,进行运算,然后产生输出(但是也不一定要同时具备这三个条件)。
2 接口
接口与类相似,其作用是给以后待完成的工作预留接入方式。比如说我们在任务开始前先搭好了程序的整体框架,但是各个部分的具体方法可能需要不同的人在不同的时间去细化完成,那么我们就需要为没有完成的部分预留接口。(就好比我写这篇博客的时候,先列大标题,再列小标题,然后在小标题下面写一些关键点,待整体框架完成后再详细补充。这里的小标题就可以看作是我留的“接口”,而里面的关键点就是我后期需要详细编写的抽象方法)
2.1 类与接口的区别
接口中所有的属性都是public,static,final的,类需要增加这些属性时需要在class前加限定词。
2.2 调用接口的方法
首先需要创建一个放置接口的子类,然后导入并编写接口的全部抽象方法。
调用方法:
public class 子类名 implements 接口名1,接口名2,……{
}
3 事件监听器的使用
事件源、动作监听方法、事件处理类
3.1 事件源
事件源就是发生动作的组件,比如“鼠标划过窗体”这一事件发生在组件窗体中,所以在这里窗体就是事件源。窗体可以接收鼠标的动作有长按、点击、松开、进入窗体、离开窗体,其中点击往往是伴随长按和松开同时发生的。
3.2 动作监听方法
在实例2“简单绘图功能实现”中,我们使用到的动作监听方法是MouseListener和ActionListener两个接口。想要使用这两个接口首先要创建一个子类来实现它们(这里创建的是DrawMouse)。
DrawMouse mouse=new DrawMouse();
jf.addMouseListener(mouse);
3.3 事件处理类
创建了子类DrawMouse后,我们就可以在对应的抽象方法中获取鼠标动作、文本内容,然后作出响应了。
//获取按钮上的内容(但是如果按钮没有文字怎么办?)
String name = e.getActionCommand();
//获取鼠标点击/松开时的点对应的坐标
x1 = e.getX();
y1 = e.getY();
如果需要在两个类中传递变量的话,可以使用以下方法
//在DrawFrame下
mouse.g=g;
//在DrawMouse下
public Graphics g;
通过此法可以把DrawFrame中的g传递到DrawMouse中
4 实践项目演示
4.1 界面组件使用
4.1.1 主函数
主函数的作用:自己调用自己,让程序运作起来
public static void main(String[]args){
DrawFrame df=new DrawFrame();
df.showFrame();
}
4.1.2 窗体的建立
窗体大小、窗体位置、窗体可见、布局格式
//窗体大小,括号中是窗体的长和宽,单位是像素
jf.setSize(600,600);
//设置窗体位置,括号中null代表居中放置,其他摆放位置可以通过按住ctrl,然后点击setLocationRelativeTo查看其源代码
jf.setLocationRelativeTo(null);
//设置窗体布局格式,先用布局方法创建一个布局变量,然后将这个变量设置为窗体的布局格式
FlowLayout flow=new FlowLayout();
jf.setLayout(flow);
//设置窗体可见(需要注意的是所有可视化组件的添加都需要放到该代码的前面,否则无法正常显示组件)
jf.setVisible(true);
//设置窗体退出操作,3代表的是EXIT_ON_CLOSE,即退出后关闭
jf.setDefaultCloseOperation(3);
4.1.3 组件
文本框、按钮
//添加文本框
//创建文本框
JTextField jtf1=new JTextField();
//文本框不能直接设置大小,需要用Dimension方法创建一个尺寸变量,然后才能将文本框设置为该变量中的尺寸
Dimension dm=new Dimension(30,30);
jtf1.setPreferredSize(dm);
//将文本框添加到窗体jf中
jf.add(jtf1);
//添加按钮
//创建按钮
JButton jbu1=new JButton("直线");
//将按钮添加到窗体中
jf.add(jbu1);
//为按钮赋予功能:参见3 事件监听器的使用
4.2 简单绘图功能实现
4.2.1 绘制直线
首先分析绘制直线的动作,点击鼠标,拖动鼠标,松开,然后就画好了一条线。在这个过程中,我们只需要使用监听器收集到鼠标点击的坐标和鼠标松开的坐标,然后将两点连接起来就可以得到一条直线了。
//为窗体赋予绘画功能
Graphics g=jf.getGraphics();
//将点(x2,y2)与(x3,y3)连接起来
g.drawLine(x2, y2, x3, y3);
4.2.2 绘制椭圆
4.2.2.1按照鼠标拖动方向绘制椭圆
g.drawOval(flag, flag, flag, flag);
通过上面这段生成椭圆的代码我们可以看出,在Java中生成椭圆需要四个数据,分别是椭圆矩形左上角的点的横纵坐标、椭圆矩形的长和宽(椭圆的长轴和短轴)。所以说如果我们想要按照鼠标拖动方向绘制椭圆,就必须选取点击和放开两个点中的横纵坐标都取最小的那个点作为椭圆矩形左上角的点。
x4 = Math.min(x1, x2);
y4 = Math.min(y1, y2);
g.drawOval(x4, y4, Math.abs(x1 - x2), Math.abs(y1 - y2));
4.2.3 用线段和点绘制三角形
flag(指针)的使用
4.2.4 改变画笔颜色(以rgb坐标改变颜色)
建立三个文本框分别收集rgb的三个坐标,然后使用以下方法实现该功能
r1=Integer.parseInt(jtf1.getText());
g1=Integer.parseInt(jtf2.getText());
b1=Integer.parseInt(jtf3.getText());
g.setColor(new Color(r1, g1, b1));
5 Java与python的不同之处
python更加简洁直白,容易理解,而且有强大的第三方库,有很多功能可以直接从第三方库导入直接实现。而且python的编写格式也更加“干净”,比方说python没有Java里恼人的大括号。