一、面向对象
15-抽象类
abstract:所有方法必须由非抽象的子类实现;不能new
抽象类可以写普通的方法,抽象方法必须在抽象类中。
存在构造器吗,可以存在:https://blog.csdn.net/JW614718/article/details/88410215
16-接口
interface implements
接口可以多继承
接口中的所有方法都是public abstract
接口中的常量默认为 public static final
不能被实例化,没有构造方法。
17-N种内部类
- 成员内部类:获得外部类的私有属性;outer.new Inner();
静态内部类:无法访问非静态 - 一个java类中可以有多个class类,但是只能有一个public class
- 局部内部类:
- 匿名内部类:没有名字初始化类,不用将实例保存在变量中
二、异常
01-Error和Exception
error Java虚拟机生成并抛出
exception
02-抛出和捕获异常
try{代码块}
catch(xxException e//想要捕获的异常类型){异常处理}
catch(Throwable t){由小变大}
finally{处理善后工作,一定执行//可选 IO流资源关闭}
throw
throws
ctrl+alt+t//自动包裹
03-自定义*
三、总结
GUI
01,02,Swing/AWT
03-frame
04-panel
不能单独存在
布局
frame.add(panel);
frame只有一个,component由很多
23种模式
适配器模式
public class Hello {
public static void main(String[] args){
Frame frame=new Frame("给🐖的游戏");
frame.setVisible(true);
frame.setSize(400, 400);
frame.setBackground(Color.darkGray);
frame.setLocation(200, 200);
frame.setLayout(null);
Panel panel=new Panel();
panel.setBounds(50,50,100,100);
panel.setBackground(new Color(193, 15, 60));
frame.add(panel);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {//windowclosing
//无法关闭的原因?
System.exit(0);
}
});
}
}
05-三种布局
alt+enter补全new语句
- 流式布局Flowlayout
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
- 东西南北中布局
frame.add(button,BorderLayout.EAST);
- 表格布局
frame.setLayout(new GridLayout(2,2));
06-练习
import java.util.Scanner;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Hello {
public static void main(String[] args){
Frame frame=new Frame("给🐖的游戏");
frame.setVisible(true);
frame.setSize(600, 600);
frame.setBackground(Color.darkGray);
frame.setLocation(0, 0);
Panel panel1=new Panel();
Panel panel2=new Panel();
Panel panel3=new Panel();
Panel panel4=new Panel();
Panel panel5=new Panel();
panel1.setBounds(0,0,100,600);
panel2.setBounds(100,0,400,600);
panel3.setBounds(500,0,100,600);
panel4.setBounds(0,300,100,300);
panel5.setBounds(0,0,100,300);
Button button1=new Button("button1");
Button button2=new Button("button2");
Button button3=new Button("button3");
Button button4=new Button("button4");
Button button5=new Button("button5");
Button button6=new Button("button6");
Button button7=new Button("button7");
Button button8=new Button("button8");
Button button9=new Button("button9");
Button button10=new Button("button10");
panel1.setBackground(new Color(255, 0, 0));
panel2.setBackground(new Color(0, 255, 0));
panel3.setBackground(new Color(0, 0, 255));
panel4.setBackground(new Color(0, 255, 255));
panel5.setBackground(new Color(255, 0, 255));
frame.setResizable(false);
panel1.add(button1);
panel1.add(button2);
panel4.add(button3);
panel4.add(button4);
panel5.add(button5);
panel5.add(button6);
panel5.add(button7);
panel5.add(button8);
panel3.add(button9);
panel3.add(button10);
panel2.setLayout(new GridLayout(2,1));
panel2.add(panel4);
panel2.add(panel5);
panel1.setLayout(new GridLayout(2,1));
panel3.setLayout(new GridLayout(2,1));
panel4.setLayout(new GridLayout(2,1));
panel5.setLayout(new GridLayout(2,2));
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
还有问题,btn9,10不显示
07-事件监听
import java.util.Scanner;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Hello {
public static void main(String[] args){
Frame frame=new Frame("给🐖的游戏");
frame.setVisible(true);
frame.setSize(600, 600);
frame.setBackground(Color.darkGray);
frame.setLocation(0, 0);
Button button=new Button("bian");
frame.add(button);
MyActionListenser myActionListenser=new MyActionListenser();
button.addActionListener(myActionListenser);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListenser implements ActionListener{//事件监听
@Override
public void actionPerformed(ActionEvent var1) {
// TODO Auto-generated method stub
System.out.print("love ya!");
}
}
e.getActionCommand();//获得标题,事件共用
08-输入框事件监听
Textfield
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Hello {
public static void main(String[] args){
// Frame frame=new Frame("给🐖的游戏");
MyFrame myFrame=new MyFrame();
}
}
@SuppressWarnings("serial")
class MyFrame extends Frame{
public MyFrame() {
TextField textField=new TextField();
add(textField);
//监听这个文本框输入的文字
MyActionListener myActionListener=new MyActionListener();
textField.addActionListener(myActionListener);
//隐藏
textField.setEchoChar('*');
setVisible(true);
pack();
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
TextField field =(TextField) e.getSource();//获得一些资源
System.out.println(field.getText());
field.setText("");
}
}
09- 简易计算器
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Hello {
public static void main(String[] args){
// Frame frame=new Frame("给🐖的游戏");
@SuppressWarnings("unused")
Calculator calculator=new Calculator();
}
}
class Calculator extends Frame{
public Calculator() {
// TODO Auto-generated constructor stub
//三个文本框
TextField num1=new TextField(10);//最大字符数
TextField num2=new TextField(10);//最大字符数
TextField num3=new TextField(10);//最大字符数
//一个按钮
Button button=new Button("=");
button.addActionListener(new MyListener(num1,num2,num3));
//一个标签
Label label=new Label("+");
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
//监听器类
class MyListener implements ActionListener{
private TextField num1,num2,num3;
//获取三个变量
public MyListener(TextField num1,TextField num2, TextField num3) {
// TODO Auto-generated constructor stub
this.num1=num1;
this.num2=num2;
this.num3=num3;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int n=Integer.parseInt(num1.getText())+Integer.parseInt(num2.getText());
num3.setText(""+n);
num1.setText("");
num2.setText("");
}
}
改进:组合
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Hello {
public static void main(String[] args){
// Frame frame=new Frame("给🐖的游戏");
@SuppressWarnings("unused")
Calculator calculator=new Calculator();
}
}
class Calculator extends Frame{
TextField num1,num2,num3;
public Calculator() {
num1=new TextField(10);//最大字符数
num2=new TextField(10);//最大字符数
num3=new TextField(10);//最大字符数
Button button=new Button("=");
Label label=new Label("+");
//组件
button.addActionListener(new MyListener(this));
//组件需要加的监听器
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
//一次性布局
}
}
//监听器类
class MyListener implements ActionListener{
Calculator calculator;
//获取三个变量
public MyListener(Calculator calculator) {
// TODO Auto-generated constructor stub
this.calculator=calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int n=Integer.parseInt(calculator.num1.getText())+Integer.parseInt(calculator.num2.getText());
calculator.num3.setText(""+n);
calculator.num1.setText("");
calculator.num2.setText("");
}
}
改进:完全面向对象,内部类;最大的好处就是直接访问外部类的属性和方法
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Hello {
public static void main(String[] args){
// Frame frame=new Frame("给🐖的游戏");
@SuppressWarnings("unused")
Calculator calculator=new Calculator();
}
}
class Calculator extends Frame{
TextField num1,num2,num3;
public Calculator() {
num1=new TextField(10);//最大字符数
num2=new TextField(10);//最大字符数
num3=new TextField(10);//最大字符数
Button button=new Button("=");
Label label=new Label("+");
//组件
button.addActionListener(new MyListener());
//组件需要加的监听器
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
//一次性布局
}
//监听器类
class MyListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int n=Integer.parseInt(num1.getText())+Integer.parseInt(num2.getText());
num3.setText(""+n);
num1.setText("");
num2.setText("");
}
}
}