3月31号
上一周算法题刷了10道,然后学习了一些鼠标按键知识,创建图形化界面的知识,菜单栏的知识,Math类的常用方法,Runtime,Object的成员方法,implements和extends.
鼠标按键和图形化界面的知识:
首先要创建一个界面和按钮(JButton),将按钮添加到界面上,在按钮上实现鼠标的功能:
1.创建界面,在类里继承JFrame(extends JFrame):(加上this是为了使当前调用的成员变量有唯一界面)
// 设置界面宽高
this.setSize(770, 770);
// 设置界面标题
this.setTitle("拼图单机版");
// 设置界面置顶
this.setAlwaysOnTop(true);
// 设置界面居中
this.setLocationRelativeTo(null);
// 设置关闭模式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
this.setLayout(null);
// 显示界面,建议写在最后
this.setVisible(true);
2.创建按钮(JButton):
// 创建一个按钮对象
JButton jtb1 =new JButton("点我呀!");
// 再创建一个按钮对象
JButton jtb2=new JButton("再点我呀!");
// 设置位置和宽高
jtb1.setBounds(0,0,100,50);
// 设置位置和宽高
jtb2.setBounds(200,0,100,50);
3.将按钮添加到图形界面中,同时我们要给按钮绑定鼠标事件:
// 把按钮添加到整个界面当中
this.getContentPane().add(jtb1);
this.getContentPane().add(jtb2);
// 给按钮绑定鼠标事件
jtb1.addMouseListener(this);
jtb2.addMouseListener(this);
接下来要继承鼠标监听的接口(implements MouseListene),会出现下面父类方法:
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("单击");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("按下不松");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("松开");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("划入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("划出");
}
当我们的鼠标在按钮上做出动作时,控制台会给我们提示相应的反应,我们可以在那些父类方法里面改写我们的程序,实现更多的操作.
菜单栏知识:
在做菜单栏前介绍一下组件:
这个是最外层的窗体:JFrame
这个是最上层的菜单:JMenuBar
这个里面没有字的部分可以放图片和文字,管理文字与图片的容器:JLabel
功能,关于我们是JMenu.重新登录,重新游戏,关闭游戏,公众号是JMenuItem.
1.首先创建整个菜单(JMenuBar)对象和两个选择对象(JMenu):
// 创建整个菜单对象
JMenuBar jMenuBar = new JMenuBar();
// 创建菜单上面的两个选择对象(功能 关于我们)
JMenu functionJMenu = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于我们");
2.创建条目对象(JMenuItem):
// 创建选项下面的条目对象
JMenuItem replayItem=new JMenuItem("重新游戏");
JMenuItem reLoginItem=new JMenuItem("重新登录");
JMenuItem closeItem=new JMenuItem("关闭游戏");
JMenuItem accountItem=new JMenuItem("公众号");
3.将条目添加到选择对象中,选择对象加到菜单栏中,菜单栏添加到界面中:
// 将每一个选项下面的条目添加到选项当中
functionJMenu.add(replayItem);
functionJMenu.add(reLoginItem);
functionJMenu.add(closeItem);
aboutJMenu.add(accountItem);
// 将菜单里面的两个选项添加到菜单当中
jMenuBar.add(functionJMenu);
jMenuBar.add(aboutJMenu);
// 给整个界面设置菜单
this.setJMenuBar(jMenuBar);
Math常用方法:
// 进一法,往数轴的正方形进一
System.out.println(Math.ceil(12.34));//13.0
System.out.println(Math.ceil(-12.34));//-12.0
System.out.println("-------------------------");
// 去尾法
System.out.println(Math.floor(12.34));//12.0
System.out.println(Math.floor(-12.33));//-13.0
System.out.println("-------------------------");
// 四舍五入
System.out.println(Math.round(12.34));//12.0
System.out.println(Math.round(12.54));//13.0
System.out.println("-------------------------");
// 获得最大值,最小值
System.out.println(Math.max(-12,34));//34
System.out.println(Math.min(12,34));//12
补充:
public static double sqrt(double a)//返回a的平方根
public stdtic double cbrt(double b)//返回b的立方根
Runtime:
// 获取Runtime的对象
Runtime r1 = Runtime.getRuntime();
Runtime r2 = Runtime.getRuntime();
System.out.println(r1==r2);
// exit停止虚拟机
r1.exit(0);
System.out.println("看看我执行了吗");//发现不运行直接退出了
// 获取CPU的线程数
System.out.println(Runtime.getRuntime().availableProcessors());
// 总内存的大小,单位是byte字节
System.out.println(Runtime.getRuntime().maxMemory());
// 已经获取的总内存大小
System.out.println(Runtime.getRuntime().totalMemory());
// 剩余内存的大小
System.out.println(Runtime.getRuntime().freeMemory());
// 运行cmd命令
// shutdown:关机
// 加上参数才能运行
// -s:默认在1分钟之后关闭
// -s -t 指定时间:指定关键时间
// -a 取消关键操作
// -r 关机并重启
Runtime.getRuntime().exec("notepad");//打开记事本
Runtime.getRuntime().exec("shutdown -s -t 3600");//一个小时后自动关机
Runtime.getRuntime().exec("shutdown -a");//取消关机
Object的成员方法:
// 1.toString 返回对象的字符串表示形式
Object obj=new Object();
String str1=obj.toString();
System.out.println(str1);//java.lang.Object@b4c966a
// 核心逻辑:
// 当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串
// 然后再打印在控制台上,打印完毕换行处理
System.out.println(obj);//java.lang.Object@b4c966a
toStrin方法的结论: 如果我们打印一个对象,想要看到属性值的话,那么就重写toString方法就可以了,在重写过程中,把对象的属性值进行比较
// public boolean equals(Object obj) 比较两个对象是否相等
String s1=new String();
String s2=new String();
boolean result1=s1.equals(s2);
System.out.println(result1);//true
结论: 1.如果没有重写equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等 2.一般来讲地址值对我们意义不大,所以我们会重写,重写之后比较的就是对象内部的属性值了
String s="abc";
StringBuffer sb=new StringBuffer("abc");
System.out.println(s.equals(sb));//false
// 因为equals方法是被s调用的,而s是字符串
// 所以equals要看String类中的
// 字符串中的equals方法,先判断参数是否为字符串
// 如果是字符串,再比较内部的属性
// 但是如果参数不是字符串,直接返回false
System.out.println(sb.equals(s));//false
// 因为equals方法是被sb调用的,而sb是stringBuilder
// 所以这里的equals方法要看stringBuilder中的equals方法
// 那么在stringBuilder当中,没有重写equals方法
// 使用的是object中的
// 在Object当中默认是使用==号比较两个对象的地址值
// 面这里的s和sb记录的地址值是不一样的,所以结果返回false
implements和extends:
1. extends(继承类):
用途:用于类继承另一个类(单继承),或者接口继承另一个接口(多继承).eg.extends JFrame
特点:一个类只能 extends一个父类(Java 是单继承). 一个接口可以 extends多个父接口(接口支持多继承).
2. implements(实现接口):
用途:用于类实现一个或多个接口。eg.implement KeyListener,ActionListener
特点:一个类可以 implements多个接口(弥补了单继承的不足). 实现接口的类必须重写接口中的所有抽象方法(除非该类是抽象类).