重拾JAVA之WinForm实战之(六)

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

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

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

初始化代码如下

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

好了我们看一下效果

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

图片就显示在了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 blocke.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 blocke.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 blocke.printStackTrace();}}

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

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

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

我们试着来保存一条。

也许叔本华是对的,人与人的距离太远会寂寞到寒冷,

重拾JAVA之WinForm实战之(六)

相关文章:

你感兴趣的文章:

标签云: