1. Frame类
Frame类:java.awt.FrameFrame(String title):新建一个不可见的窗体,标题为titlevoid setSize(int width, int height):设置窗口的大小void setLocation(int x, int y):设置窗口的位置void setIconImage(Image image):设置窗口的图标Image image = Toolkit.getDefaultToolkit().createImage("xx/xx.jpg");
void setVisible(boolean b):设置是否可见Component add(Component comp):添加组建到窗口中
2. 布局管理器
frame.setLayout(LayoutManager mgr):设置布局管理器,如:new FlowLayout()FlowLayout:流式布局;从左到右BorderLayout:边界布局;东南西北中GridLayout:网格布局;规则矩阵GridBagLayout:网格包布局;非规则矩阵CardLayout:卡片布局;选项卡
3. 窗体监听
frame.addWindowListener(WindowListener listener):添加窗体监听WindowListener接口:java.awt.event.WindowListenervoid windowActivated(WindowEvent e):活动时调用void windowClosed(WindowEvent e):关闭时调用void windowClosing(WindowEvent e):从系统菜单中关闭时调用void windowDeactivated(WindowEvent e):非活动窗口时调用void windowDeiconfied(WindowEvent e):最小化变为正常时调用void windowIconfied(WindowEvent e):正常变为最小化时调用void windowOpened(WindowEvent e):首次变为可见时调用WindowAdapter类实现了WindowListener接口,可以避免重写多余的方法
4. 鼠标监听
component.addMouseListener(MouseListener listener):添加鼠标监听MouseListener接口:java.awt.event.MouseListenervoid mouseClicked(MouseEvent e):鼠标单击时调用void mouseEntered(MouseEvent e):鼠标进入时调用void mouseExited(MouseEvent e):鼠标移开时调用void mousePressed(MouseEvent e):鼠标按下时调用void mouseReleased(MouseEvent e):鼠标释放时调用MouseAdapter类实现了MouseListener接口,可以避免重写多余的方法
5. 键盘监听
component.addKeyListener(KeyListener listener):添加键盘监听KeyListener接口:java.awt.event.KeyListenervoid keyPressed(KeyEvent e):按键按下时调用void keyReleased(KeyEvent e):按键释放时调用void keyTyped(KeyEvent e):键入某个键时调用- 可通过传入的
KeyEvent对象的getKeyCode()方法获取按键码,判断是哪个按键按下 KeyEvent类中每个按键都有一个对应的常量值KeyAdapter类实现了KeyListener接口,可以避免重写多余的方法
6. 动作监听
component.addActionListener(ActionListener listener):添加动作监听ActionListener接口:java.awt.event.ActionListenervoid actionPerformed(ActionEvent e):鼠标点击或按下空格时调用,类似视频暂停功能
7. 相关术语
- 事件:用户的操作,包含鼠标、键盘等操作
- 事件源:被操作的组件
- 监听器:实现监听器接口的类,被添加到事件源上后,事件发生时虚拟机就会自动调用监听器中的事件处理方法
8. UDP传输
-
UDP协议不区分客户端和服务端
-
发送
String str = "hello!"; /* 创建DatagramSocket对象,端口号可以为随机 */ DatagramSocket socket = new DatagramSocket(); /* 创建DatagramPacket对象,指定数据、长度、目标地址、端口 */ DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes.length, InetAddress.getByName("127.0.0.1"), 6666); /* 使用DatagramSocket对象发送DatagramPacket对象 */ socket.send(packet); /* 关闭DatagramSocket */ socket.close(); -
接收
/* 创建DatagramSocket对象,指定接收端口 */ DatagramSocket socket = new DatagramSocket(6666); /* 创建DatagramPacket对象,指定数组与长度 */ DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); /* 使用DatagramSocket对象接收DatagramPacket */ socket.receive(packet); /* 从DatagramPacket对象中获取数据 */ byte[] arr = packet.getData(); int len = packet.getLength(); String str = new String(arr, 0, len); /* 关闭DatagramSocket */ socket.close();
9. TCP传输
-
TCP协议区分客户端和服务端
-
客户端
/* 创建Socket对象连接服务端,需要指定IP与端口号 */ Socket socket = new Socket("127.0.0.1", 1234); /* 调用Socket对象的getInputStream与getOutputStream方法,获取与服务端相连的IO流 */ InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); /* 使用输出流写数据到服务端的输入流 */ out.write("hello world".geteBytes()); /* 使用输入流读取服务端输出流的数据 */ byte[] buf = new byte[1024]; int len = in.read(buf); String result = new String(buf, 0, len); /* 关闭Socket,会将InputStream与OutputStream一起关闭 */ socket.close(); -
服务端
/* 创建ServerSocket对象,需要指定端口号 */ ServerSocket server = new ServerSocket(1234); /* 调用ServerSocket的accpt方法接收一个客户端的请求,得到一个Socket;accpt方法在没有请求时阻塞 */ Socket socket = server.accpt(); /* 调用Socket对象的getInputStream与getOutputStream方法,获取与客户端相连的IO流 */ InputStreawm in = socket.getInputStreawm(); OutputStreawm out = socket.getOutputStream(); /* 使用输出流写数据到客户端的输入流 */ out.write("service: welcome!".getBytes()); byte[] buf = new byte[1024]; /* 使用输入流读取客户端输出流的数据 */ int len = in.read(buf); String result = new String(buf, 0, len); /* 关闭Socket,会将InputStream与OutputStream一起关闭 */ socket.close(); /* 关闭ServerSocket,即关闭服务,不再响应请求,故一般不关闭 */ server.close();