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

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

重拾JAVA之WinForm实战之(六)_笔记本wifi

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

重拾JAVA之WinForm实战之(六)_笔记本wifi_02

初始化代码如下

private void Init() {
        cmbSex.addItem("男");
        cmbSex.addItem("女");
        ButtonGroup btnGrp = new ButtonGroup();
        btnGrp.add(radioBz);
        btnGrp.add(radioWh);
        btnGrp.setSelected(radioWh.getModel(), true);
    }

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

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这个抽象类,并实现他的两个抽象方法

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");
        }
    }

好了我们看一下效果

重拾JAVA之WinForm实战之(六)_JAVA DatePicker_03

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

重拾JAVA之WinForm实战之(六)_笔记本wifi_04

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

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,最后按比例缩放,勾选复选框是表示我们要保存这个图片。


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

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。重点是这里的图片保存

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

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

我们试着来保存一条。

重拾JAVA之WinForm实战之(六)_JAVA DatePicker_05

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

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();
                }
            }
        });

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

重拾JAVA之WinForm实战之(六)_JAVA SqlServer 图片_06

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

重拾JAVA之WinForm实战之(六)_笔记本wifi_07

输入完密码,登录

重拾JAVA之WinForm实战之(六)_笔记本wifi_08

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


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

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

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

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

重拾JAVA之WinForm实战之(六)_JAVA DatePicker_09

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

重拾JAVA之WinForm实战之(六)_JAVA SqlServer 图片_10

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

重拾JAVA之WinForm实战之(六)_JAVA SqlServer 图片_11

选择属性,弹出如下界面

重拾JAVA之WinForm实战之(六)_笔记本wifi_12

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

重拾JAVA之WinForm实战之(六)_笔记本wifi_13

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

netsh wlan start hostednetwork

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

重拾JAVA之WinForm实战之(六)_笔记本wifi_14

OK,承载成功。

重拾JAVA之WinForm实战之(六)_笔记本wifi_15

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

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

netsh wlan show drivers

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

重拾JAVA之WinForm实战之(六)_JAVA SqlServer 图片_16

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

重拾JAVA之WinForm实战之(六)_JAVA SqlServer 图片_17

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