重拾JAVA之WinForm实战之(六)

简介:

今天我们来看一下用户信息修改界面,这部分关于Java Winform的博客今天到这里就是左后一篇了,更多的还是有用到的再去挖。这篇完了之后我们就进入java重拾的web实战。OK,废话不多说,今天还获得惊喜,什么惊喜呢,看完博客再给你说。

用户信息修改的C#界面如下

115107656.png

我们再看一下java版本的界面

115158477.png

初始化代码如下

1
2
3
4
5
6
7
8
private  void  Init() {
         cmbSex.addItem( "男" );
         cmbSex.addItem( "女" );
         ButtonGroup btnGrp =  new  ButtonGroup();
         btnGrp.add(radioBz);
         btnGrp.add(radioWh);
         btnGrp.setSelected(radioWh.getModel(),  true );
     }

那我们今天就要实现这个界面的功能。首先我们先从右边的图片选择下手,点击浏览按钮,弹出文件选择框,选择图片文件,这里设置只支持jpg和GIF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private  void  ChooseImageAndShow() {
         JFileChooser jfc =  new  JFileChooser();
         jfc.setDialogTitle( "选择照片" );
         jfc.setMultiSelectionEnabled( false );
         jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
         JpgFileFilter jpgFilter =  new  JpgFileFilter();
         GifFileFilter gifFilter =  new  GifFileFilter();
         jfc.addChoosableFileFilter(jpgFilter);
         jfc.addChoosableFileFilter(gifFilter);
         jfc.setFileFilter(jpgFilter);
         jfc.showOpenDialog( this );
         File file = jfc.getSelectedFile();
         if  (file !=  null ) {
             photoPath = file.getAbsolutePath();
             Image img = Toolkit.getDefaultToolkit().createImage(
                     file.getAbsolutePath());
             ImageIcon imgIcon =  new  ImageIcon(img.getScaledInstance(
                     panelPhoto.getWidth(), panelPhoto.getHeight(),
                     Image.SCALE_SMOOTH));
             this .labPhoto.setIcon(imgIcon);
         }
     }

该方法先new一个文件选择框,然后设置标题,设置是否可以多选,选择的模式是只能选择文件还是文件和文件夹都可以选择。然后设置两个文件过滤,只能显示jpg和GIF文件,这个文件过滤没有C#那么简单,需要些两个类去继承FileFilter这个抽象类,并实现他的两个抽象方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class  JpgFileFilter  extends  FileFilter {
         public  String getDescription() {
             return  "*.jpg" ;
         }
         public  boolean  accept(File file) {
             String name = file.getName();
             return  name.toLowerCase().endsWith( ".jpg" );
         }
     }
     class  GifFileFilter  extends  FileFilter {
         public  String getDescription() {
             return  "*.gif" ;
         }
         public  boolean  accept(File file) {
             String name = file.getName();
             return  name.toLowerCase().endsWith( ".gif" );
         }
     }

好了我们看一下效果

115827619.png

看到了吧标题,文件类型过滤都是我们刚才设置的。好的,我们就选择这个图片

115948936.png

图片就显示在了label中,好了,显示就是通过上面贴的这段代码实现的

1
2
3
4
5
6
7
8
9
if  (file !=  null ) {
             photoPath = file.getAbsolutePath();
             Image img = Toolkit.getDefaultToolkit().createImage(
                     file.getAbsolutePath());
             ImageIcon imgIcon =  new  ImageIcon(img.getScaledInstance(
                     panelPhoto.getWidth(), panelPhoto.getHeight(),
                     Image.SCALE_SMOOTH));
             this .labPhoto.setIcon(imgIcon);
         }

首先,我们将绝对路径赋给一个全局变量,用于最后的保存时获取图片的路径。然后再通过路径得到Image,最后按比例缩放,勾选复选框是表示我们要保存这个图片。


接下来我们看一下保存按钮做的事情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
private  void  SaveUserInfo()  throws  FileNotFoundException {
         String userName = txtUserName.getText().trim();
         String sex = cmbSex.getSelectedItem().toString();
         String age = fmtAge.getText();
         String birthDay = datepick.getText();
         if  (userName.isEmpty()) {
             MessageHelper.ShowMessage( "姓名不能为空!" );
             return ;
         }
         if  (age.isEmpty()) {
             MessageHelper.ShowMessage( "年龄不能为空!" );
             return ;
         }
         if  (birthDay.isEmpty()) {
             MessageHelper.ShowMessage( "出生日期不能为空!" );
             return ;
         }
         DateFormat df = DateFormat.getDateInstance();
         try  {
             Date dt = df.parse(birthDay);
             if  (dt.before(df.parse( "1920-01-01 00:00:01" ))
                     || dt.after(df.parse( "2000-01-01 00:00:01" ))) {
                 MessageHelper.ShowMessage( "出生年份必须在1920至2000年之间!" );
                 return ;
             }
         catch  (ParseException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         if  (chkPhoto.isSelected()) {
             if  (photoPath ==  null  || photoPath ==  "" ) {
                 MessageHelper.ShowMessage( "请选择图片!" );
                 return ;
             }
         }
         String sql =  "UPDATE TOP(1) dbo.UerInfo SET Name=?,Sex=?,Age=?,BirthDay=?" ;
         if  (photoPath !=  ""  && chkPhoto.isSelected()) {
             sql +=  ",Photo=?" ;
         }
         sql +=  " WHERE useNo='"  + FrmLogin.user.getUserNo() +  "'" ;
         Connection con = JDBCSqlHelper.GetConnection();
         try  {
             PreparedStatement stmt = con.prepareStatement(sql);
             stmt.setString( 1 , userName);
             stmt.setString( 2 , sex== "男" "1" : "0" );
             stmt.setInt( 3 , Integer.parseInt(age));
             SimpleDateFormat sdf =  new  SimpleDateFormat();
             sdf.applyPattern( "yyyy-MM-dd" );
             Date dt =  new  Date();
             try  {
                 dt = sdf.parse(birthDay);
             catch  (ParseException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             stmt.setDate( 4 new  java.sql.Date(dt.getDate()));
             if  (photoPath !=  ""  && chkPhoto.isSelected()) {
                 File fl =  new  File(photoPath);
                 FileInputStream fis =  new  FileInputStream(fl);
                 stmt.setBinaryStream( 5 , fis, ( int ) fl.length());
             }
             stmt.executeUpdate();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
             MessageHelper.ShowMessage( "保存成功!" );
             this .dispose();
         catch  (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }

进过一系列的验证之后,拼成修改的Sql语句,然后保存进sqlserver。重点是这里的图片保存

主要是获取文件长度和文件流。

1
2
3
File fl =  new  File(photoPath);
                 FileInputStream fis =  new  FileInputStream(fl);
                 stmt.setBinaryStream( 5 , fis, ( int ) fl.length());

我们试着来保存一条。

120907232.png

哇靠,这是个什么控件,我也不知道,从网上下载的。选择完生日之后,会自动根据选择的生日计算它的年龄,所以这里的年龄的框框是IsEditable=false的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
datepick.getInnerTextField().addCaretListener( new  CaretListener() {
             public  void  caretUpdate(CaretEvent e) {
                 String date = datepick.getText();
                 if  (date.trim() ==  "" )
                     return ;
                 SimpleDateFormat df =  new  SimpleDateFormat();
                 df.applyPattern( "yyyy-MM-dd hh:mm:ss" );
                 try  {
                     Date dt = df.parse(date);
                     int  age =  new  Date().getYear() - dt.getYear();
                     fmtAge.setText(String.valueOf(age));
                 catch  (ParseException e1) {
                     // TODO Auto-generated catch block
                     e1.printStackTrace();
                 }
             }
         });

用当前年份减去选择的年份,大概算出年龄,我们输入完所有的信息后,点击保存

121304172.png

保存成功了,我们重新登陆一下,看照片变了没有。

121516136.png

输入完密码,登录

121608889.png

成功了,到此,我们这一部分的就全部结束了。


最后,我们看一下今天到底啥惊喜呢?对于学网络的人来说这个可能不算什么。前几天我想从网上买个无线路由,然后配置好后,使用手机的Wlan。可是看了一些,价格都比较贵,100以上。我最近很穷,买不起。偶尔看到一篇文章说是有些笔记本可以发射无线网络信号。我想我的dell 1420可能没戏吧,于是试了一下,不行也就算了,大不了工资发了一咬牙每一个无线路由。开始吧

我的系统是Win7,打开cmd输入如下命令

1
netsh wlan  set  hostednetwork mode=allow ssid=binglanPC key=你的Wlan密码

这段命令的意思是允许虚拟Wifi网卡,无线网络名称是lileiPC,key是密码自己设。

130733376.png

完了之后我们去控制面板看一下(控制面板\所有控制面板项\网络和共享中心)

123139506.png

点击宽带连接,弹出如下界面

123309205.png

选择属性,弹出如下界面

130828698.png

勾选允许.....,家庭网络连接选择无线网络连接2,OK,点击确定,弹出如下

123527890.png

不用管,点击确定,完了之后就是启动了用如下命令

1
netsh wlan start hostednetwork

注意了,如果要停掉,可以把start改为Stop。

131059833.png

OK,承载成功。

131132448.png

OK,我们已经看到了我们创建的虚拟wifi,他可以访问internet。用手机试了一下也是没问题的,看优酷,PPTV杠杠的。

如果你在按照上面的设置中未能成功,首先看一下你的机器支持不支持虚拟wifi,输入命令

1
netsh wlan show drivers

如果显示的结果里支持的承载网络显示为是的话就可以

131517705.png

二是如果爆出什么无法启动承载网络,什么状态不对的。去windows 设备管理器下去看wifi适配器有没有开启。

131733786.png

OK,到此咋们的wifi就设置成功了,天比较冷,我还是在被窝里看书吧,手机也可以连笔wifi了,看电视剧也是不错的选择,火凤凰最近不错,或者结婚吧也行。




本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/1334360,如需转载请自行联系原作者

相关文章
|
2月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
40 3
|
10天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
32 6
|
13天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
22 7
|
14天前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
54 1
|
21天前
|
存储 负载均衡 Java
Jetty技术深度解析及其在Java中的实战应用
【9月更文挑战第3天】Jetty,作为一款开源的、轻量级、高性能的Java Web服务器和Servlet容器,自1995年问世以来,凭借其卓越的性能、灵活的配置和丰富的扩展功能,在Java Web应用开发中占据了举足轻重的地位。本文将详细介绍Jetty的背景、核心功能点以及在Java中的实战应用,帮助开发者更好地理解和利用Jetty构建高效、可靠的Web服务。
32 2
|
4天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
5 0
|
26天前
|
Java 开发者
Java中的多线程编程基础与实战
【9月更文挑战第6天】本文将通过深入浅出的方式,带领读者了解并掌握Java中的多线程编程。我们将从基础概念出发,逐步深入到代码实践,最后探讨多线程在实际应用中的优势和注意事项。无论你是初学者还是有一定经验的开发者,这篇文章都能让你对Java多线程有更全面的认识。
22 1
|
1月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
8天前
|
消息中间件 缓存 Java
RocketMQ的JAVA落地实战
RocketMQ作为一款高性能、高可靠、高实时、分布式特点的消息中间件,其核心作用主要体现在异步处理、削峰填谷以及系统解耦三个方面。
37 0