黑马程序员__GUI__网络编程

来源:互联网 发布:v百科网络流行语 编辑:程序博客网 时间:2024/06/14 02:41

--------- android培训java培训、期待与您交流! ------------

GUI图形用户界面

Grphical User Interface图形用户接口

用图形的方式,来显示计算机操作的界面,这样更方便,更直观

CLI  Command Line User Interface命令行用户接口,就是常见的DOS命令行操作,需要记忆一些常用的命令,操作不直观

JavaGUI提供的对象都存在Java.Awtjavax.Swing两个包中

AwtSwing

Java.Awt: Abstract Window ToolKit(抽象窗口工具包)需要调用本地系统方法实现功能,属重量级控件

Javax.Swing: AWT基础上建立的一套图形界面系统,其实提供了更多的组件,而且完全由Java实现增强了移植性,属轻量级控件

Container为容器,是一个特殊组件该组件中可以通过add方法添加其他组件进来

容器中的组件的排放方式,就是布局

常见的布局管理器

FlowLayout(流式布局管理器)从左到右的顺序排列,Panel默认的布局管理器

BorderLayout(边界布局管理器)东南西北中Frame默认的布局管理器

GridLayout(网格布局管理器)规则的矩阵

CardLayout(卡片布局管理器)选项卡

GridBagLayout(网格包布局管理器)非规则的矩阵

创建图形化界面

1.       创建frame窗体;

2.       对窗体进行基本设置,比如大小setSize(500,400),位置setLocation(300,400),
setBounds(x,y,width,height)
设置位置及大小布局setLayout(new FlowLayout());

3.       定义组件;

4.       将组件通过窗体的add方法添加到窗体中;

5.       让窗体显示,通过setVisible(true)

事件监听机制的特点:

1,事件源;2事件;3监听器4事件处理

事件源:就是awt包或者swing包中的那些图形界面组件

事件:每一个事件源都有自己特有的对应事件和共性事件

监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中

以上三者,java中都已经定义好了,获取其对象来用就可以了

我们要做的事情是,是就是对产生的动作进行处理

因为WindowListener的子类WindowAdapter已经实现了WindowListener接口,并覆盖了其中的所有方法,那么我只要继承自WindowAdapter覆盖我需要的方法即可

当用到图形化界面的时候一般要导两个包java.awt.*;java.awt.event.*;

public void windowClosing(WindowEvent e)

{

       System.exit(0);//关闭窗口

}

public void windowActivated(WindowEvent e)

{//窗口处于最前端}

public void windowOpened(WindowEvent e)

{//窗口打开了}

按钮ActionListener是少数没有适配器(方法超过3个)接口中的一个

在按钮上添加动作要注意添加

but.addActionListener(new ActionListener())对鼠标键盘都起作用

but.addMouseListener(new MouseAdapter())当有它时,会先执行鼠标动作,因为它更具体

e.consume()使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理些事件

Menu extends MenuItem菜单(Menu)里可以放条目(MenuItem

Menu add(MenuItem)

FileDialog openDia,saveDia;

openDia=new FileDialog(f,"我的打开",FileDialog.LOAD)

最后的参数为模式,有两个LOADSAVE

在写事件的时候要判断是否取消

String dirPath = openDia.getDirectory();

String fileName = openDia.getFile();

if(dirPath ==null || fileName==null)

       return;//如果取消的话就返回,什么也不做

jar -cvfm my.jar 1.txt mymenu

将包mymenu打成jar包,把1.txt中的主函数信息传给jar

1.txt中的内容:

Main-Class:(此处一个有空格) mymenu.MyMenuDemo(这里一定有回车)

在此之前要先将jar文件注册的系统中,其过程如下:

xP系统:工具à文件夹选项à文件类型à新建扩展名为jar的文件类型à选中jar,点击高级按钮à更改图标,图标可以任意选;点击新建按键à添加open操作,操行名称写完“open”,用于执行操作的程序选择JDK目录下的javaw工具,并在末尾加上–jar参数。

Win7系统:

1、选择默认程序:右击jar包,打开方式->选择默认程序->浏览,选中jrebin文件中javaw.exe(比如我的javaw.exeD:\ProgramFiles\Java\jre6\bin下)。

 2、编辑注册表:HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,修改数据数值为"D:\ProgramFiles\Java\jdk1.6.0_21\jre\bin\javaw.exe" -jar "%1"(只要在原来的数值下添加-jar即可)。

网络参考模型

IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址:127.0.0.1主机名:localhost

端口号:用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使用或保留端口

传输协议:通讯的规则,常见协议:TCP,UDP

UDP:     

将数据及源和目的封装成数据包中

不需要建立连接

每个数据包的大小限制在64K

因无连接,是不可靠协议,不需要建立连接,速度快

TCP:

建立连接,形成传输数据的通道

在连接中进行大数据量传输

通过三次握手完成连接

是可靠协议,建立连接,效率会稍低

Socket

Socket就是为网络服务提供的一种机制

通信的两端都有Socket

网络通信其实就是Socket间的通信

数据在两个Socket间通过IO传输

InetAddress ia = InetAddress.getByName("www.baidu.com");

ia.getHostAddress();//获取主机地址

ia.getHostName();//获取主机名

UDP例子

import java.net.*;

class UdpSend

{

       public static void main(String[] args) throws Exception

       {

              //1.创建udp服务,通过DatagramSocket对象

              DatagramSocket ds = new DatagramSocket();

              //2.确定数据,并封装成数据包

              //DatagramPacket(byte[] buf, int length, InetAddress address, int port)

              byte[] buf = "udp ge men lai le".getBytes();

              DatagramPacket dp =

                     new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);

              //3.通过socket服务,将已有的数据包发送出去,通过send方法

              ds.send(dp);

              //4.关闭资源

              ds.close();

 

       }

}

/*

需求:定义一个应用程序,用于接收udp协议传输的数据并处理

思路:

1.定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识

       方便于明确哪些数据过来该应用程序可以处理

2.定义一个数据包,因为要存储接收到的字节数据

因为数据包对象中有更多功能可以提取字节数据中的不同数据信息

3.通过socket服务的receiver方法将收到的数据存入已定义好的数据包中

4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上

5.关闭资源

*/

class UdpRece

{

       public static void main(String[] args)throws Exception

       {

              //1.创建udp socket,建立端点

              DatagramSocket ds = new DatagramSocket(10000);

              //2.定义数据包,用于存储数据

              byte[] buf = new byte[1024];

              DatagramPacket dp = new DatagramPacket(buf,buf.length);

              //3.通过服务的receiver方法将收到数据存入数据包中

              ds.receive(dp);

              //4.通过数据包的方法获取其中的数据

              String ip = dp.getAddress().getHostAddress();

              String data = new String(dp.getData(),0,dp.getLength());

 

              int port = dp.getPort();

              System.out.println(ip + ".."+data+".."+port);

              //5.关闭资源

              ds.close();

       }

}

TCP示例

import java.net.*;

import java.io.*;

class TcpClient

{

       public static void main(String[] args) throws Exception

       {

              //创建客户端的socket服务,指定目的主机和端口

              Socket s = new Socket("127.0.0.1",10003);

              //为了发送数据,应该获取socket流中的输出流

              OutputStream out = s.getOutputStream();

              out.write("tcp哥们来了".getBytes());

              s.close();

       }

}

/*

需求:定义端点接收数据并打印在控制台上

服务端:

1.建立服务端的socket服务,ServerSocket();并监听一个端口

2.获取连接过来的客户端对象。通过ServerSocketaccept方法(阻塞式的)

3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,

并获取到该客户端对象的读取流来读取发过来的数据,并打印在控制台

4.关闭服务端(可选)

*/

class TcpServer

{

       public static void main(String[] args)throws Exception

       {

              //建立服务端socket服务,并监听一个端口

              ServerSocket ss = new ServerSocket(10003);

              //通过accept方法获取连接过来的客户端对象

              Socket s = ss.accept();

              String ip = s.getInetAddress().getHostAddress();

              System.out.println(ip+"....connected");

              //获取客户端发送过来的数据,那么要使用客户端对象的读取流,来读取数据

              InputStream in = s.getInputStream();

              byte[] buf = new byte[1024];

              int len = in.read(buf);

              System.out.println(new String(buf,0,len));

              s.close();//关闭客户端

       }

}

并发访问服务端

       ServerSocket ss = new ServerSocket(10007);

           while(true)

{

Socket s = ss.accept();

           new Thread(new PicThread(s)).start();

           }

InetSocketAddress此类实现 IP套接字地址(IP地址 +端口号)。

ServerSocket(int port, int backlog)设定连接数量backlog

--------- android培训java培训、期待与您交流! ------------

 

原创粉丝点击