how2j.cn


步骤 1 : 练习-为空判断   
步骤 2 : 答案-为空判断   
步骤 3 : 练习-数字校验   
步骤 4 : 答案-数字校验   
步骤 5 : 练习-账号密码验证   
步骤 6 : 答案-账号密码验证   
步骤 7 : 练习-黄鹤   
步骤 8 : 答案-黄鹤   
步骤 9 : 练习-复利计算器   
步骤 10 : 答案-复利计算器   
步骤 11 : 练习-进度条   
步骤 12 : 答案-进度条   
步骤 13 : 练习-显示文件夹复制进度条   
步骤 14 : 答案-显示文件夹复制进度条   

步骤 1 :

练习-为空判断

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
在JTextField中输入数据,在旁边加一个按钮JButton,当点击按钮的时候,判断JTextFiled中有没有数据,并使用JOptionPane进行提示
练习-为空判断
步骤 2 :

答案-为空判断

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分36秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JTextField tf = new JTextField(); tf.setPreferredSize(new Dimension(80,30)); JButton b = new JButton("检测"); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = tf.getText(); if(0==text.length()){ JOptionPane.showMessageDialog(f, "文本内容为空"); tf.grabFocus(); } } }); f.add(tf); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
步骤 3 :

练习-数字校验

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
在JTextField中输入数据,在旁边加一个按钮JButton,当点击按钮的时候,判断JTextFiled中的数据是否是数字,并使用JOptionPane进行提示
练习-数字校验
步骤 4 :

答案-数字校验

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

50秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JTextField tf = new JTextField(); tf.setPreferredSize(new Dimension(80,30)); JButton b = new JButton("检测"); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = tf.getText(); try { Integer.parseInt(text); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(f, "输入框内容不是整数"); tf.grabFocus(); } } }); f.add(tf); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
步骤 5 :

练习-账号密码验证

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
准备两个JTextFiled,一个用于输入账号,一个用于输入密码。

再准备一个JButton,上面的文字是登陆

点击按钮之后,首先进行为空判断,如果都不为空,则把账号和密码,拿到数据库中进行比较(SQL语句判断账号密码是否正确),根据判断结果,使用JOptionPane进行提示。
练习-账号密码验证
步骤 6 :

答案-账号密码验证

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

2分12秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); JPanel pNorth = new JPanel(); pNorth.setLayout(new FlowLayout()); JPanel pCenter = new JPanel(); JLabel lName = new JLabel("账号:"); JTextField tfName = new JTextField(""); tfName.setText(""); tfName.setPreferredSize(new Dimension(80, 30)); JLabel lPassword = new JLabel("密码:"); JPasswordField tfPassword = new JPasswordField(""); tfPassword.setText(""); tfPassword.setPreferredSize(new Dimension(80, 30)); pNorth.add(lName); pNorth.add(tfName); pNorth.add(lPassword); pNorth.add(tfPassword); JButton b= new JButton("登陆"); pCenter.add(b); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = tfName.getText(); String password = new String( tfPassword.getPassword()); if(0==name.length()){ JOptionPane.showMessageDialog(f, "账号不能为空"); tfName.grabFocus(); return; } if(0==password.length()){ JOptionPane.showMessageDialog(f, "密码不能为空"); tfPassword.grabFocus(); return; } if(check(name, password)) JOptionPane.showMessageDialog(f, "登陆成功"); else JOptionPane.showMessageDialog(f, "密码错误"); } }); f.setLayout(new BorderLayout()); f.add(pNorth,BorderLayout.NORTH); f.add(pCenter,BorderLayout.CENTER); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } public static boolean check(String name, String password) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } boolean result = false; try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement(); ) { String sql = "select * from user where name = '" + name +"' and password = '" + password+"'"; // 执行查询语句,并把结果集返回给ResultSet ResultSet rs = s.executeQuery(sql); if(rs.next()) result = true; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } }
步骤 7 :

练习-黄鹤

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
练习-黄鹤改成Swing来完成

要有为空和数字判断
练习-黄鹤
步骤 8 :

答案-黄鹤

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 400); f.setLocation(200, 200); int gap = 10; JPanel pInput = new JPanel(); pInput.setLayout(new GridLayout(4, 3, gap, gap)); JLabel lLocation = new JLabel("地名:"); JTextField tfLocation = new JTextField(""); JLabel lType = new JLabel("公司类型:"); JTextField tfType = new JTextField(""); JLabel lCompanyName = new JLabel("公司名称:"); JTextField tfCompanyName = new JTextField(""); JLabel lBossName = new JLabel("老板名称:"); JTextField tfBossName = new JTextField(""); JLabel lMoney = new JLabel("金额:"); JTextField tfMoney = new JTextField(""); JLabel lProduct = new JLabel("产品:"); JTextField tfProduct = new JTextField(""); JLabel lUnit = new JLabel("价格计量单位"); JTextField tfUnit = new JTextField(""); pInput.add(lLocation); pInput.add(tfLocation); pInput.add(lType); pInput.add(tfType); pInput.add(lCompanyName); pInput.add(tfCompanyName); pInput.add(lBossName); pInput.add(tfBossName); pInput.add(lMoney); pInput.add(tfMoney); pInput.add(lProduct); pInput.add(tfProduct); pInput.add(lUnit); pInput.add(tfUnit); f.setLayout(null); pInput.setBounds(gap, gap, 375, 120); JButton b = new JButton("生成"); JTextArea ta = new JTextArea(); ta.setLineWrap(true); b.setBounds(150, 120 + 30, 80, 30); ta.setBounds(gap, 150 + 60, 375, 120); f.add(pInput); f.add(b); f.add(ta); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); b.addActionListener(new ActionListener() { boolean checkedpass = true; @Override public void actionPerformed(ActionEvent e) { checkedpass = true; checkEmpty(tfLocation,"地址"); checkEmpty(tfType,"公司类型"); checkEmpty(tfCompanyName,"公司名称"); checkEmpty(tfBossName,"老板姓名"); checkNumber(tfMoney,"金额"); checkEmpty(tfProduct,"产品"); checkEmpty(tfUnit,"价格计量单位"); String location = tfLocation.getText(); String type = tfType.getText(); String companyName = tfCompanyName.getText(); String bossName = tfBossName.getText(); String money = tfMoney.getText(); String product = tfProduct.getText(); String unit = tfUnit.getText(); if(checkedpass){ String model = "%s最大%s%s倒闭了,王八蛋老板%s吃喝嫖赌,欠下了%s个亿," + "带着他的小姨子跑了!我们没有办法,拿着%s抵工资!原价都是一%s多、两%s多、三%s多的%s," + "现在全部只卖二十块,统统只要二十块!%s王八蛋,你不是人!我们辛辛苦苦给你干了大半年," + "你不发工资,你还我血汗钱,还我血汗钱!"; String result= String.format(model, location,type,companyName,bossName,money,product,unit,unit,unit,product,bossName); ta.setText(""); ta.append(result); } } private void checkNumber(JTextField tf, String msg) { if(!checkedpass) return; String value = tf.getText(); try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(f, msg + " 必须是整数"); tf.grabFocus(); checkedpass = false; } } private void checkEmpty(JTextField tf, String msg) { if(!checkedpass) return; String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(f, msg + " 不能为空"); tf.grabFocus(); checkedpass = false; } } }); } }
步骤 9 :

练习-复利计算器

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
参考练习-百万富翁,把 网页版的复利计算器 改成swing来做

复利公式:
F = p* ( (1+r)^n );
F 最终收入
p 本金
r 年利率
n 存了多少年

假设情景一:
p = 10000
r = 0.05
n = 1

解读:
本金是10000
年利率是5%
存了一年 1次
复利收入 10000*( (1+0.05)^1 ) = 10500

假设情景二:
p = 10000
r = 0.05
n = 2

解读:
本金是10000
年利率是5%
存了两年
复利收入 10000*( (1+0.05)^2 ) = 11025
练习-复利计算器
步骤 10 :

答案-复利计算器

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

9分49秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; @SuppressWarnings("unused") public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setLayout(null); f.setSize(400, 400); f.setLocation(200, 200); int gap = 10; JPanel pInput = new JPanel(); pInput.setLayout(new GridLayout(4, 6, gap, gap)); pInput.setBounds(gap, gap, 375, 120); JLabel lInit =new JLabel("起始资金"); JLabel lRate =new JLabel("每年收益"); JLabel lYear =new JLabel("复利年数"); JLabel lInverst=new JLabel("每年追加资金"); JTextField tfInit = new JTextField("12000"); JTextField tfRate = new JTextField("20"); JTextField tfYear = new JTextField("2"); JTextField tfInvest = new JTextField("12000"); JLabel lInitSign =new JLabel("¥"); JLabel lRateSign =new JLabel("%"); JLabel lYearSign =new JLabel("年"); JLabel lInvestSign =new JLabel("¥"); pInput.add(lInit); pInput.add(tfInit); pInput.add(lInitSign); pInput.add(lRate); pInput.add(tfRate); pInput.add(lRateSign); pInput.add(lYear); pInput.add(tfYear); pInput.add(lYearSign); pInput.add(lInverst); pInput.add(tfInvest); pInput.add(lInvestSign); JPanel pResult = new JPanel(); pResult.setLayout(new GridLayout(4, 6, gap, gap)); JLabel lBaseSum =new JLabel("本金和"); JLabel lInterestSum =new JLabel("利息和"); JLabel lTotalSum =new JLabel("本息和"); JTextField tfBaseSum = new JTextField(); JTextField tfInterestSum = new JTextField(); JTextField tfTotalSum = new JTextField(); JLabel lBaseSumSign =new JLabel("¥"); JLabel lInterestSumSign =new JLabel("¥"); JLabel lTotalSumSign =new JLabel("¥"); pResult.add(lBaseSum); pResult.add(tfBaseSum); pResult.add(lBaseSumSign); pResult.add(lInterestSum); pResult.add(tfInterestSum); pResult.add(lInterestSumSign); pResult.add(lTotalSum); pResult.add(tfTotalSum); pResult.add(lTotalSumSign); JButton b = new JButton("计算"); b.setBounds(150, 120 + 30, 80, 30); pResult.setBounds(gap, 150 + 60, 375, 120); f.add(pInput); f.add(b); f.add(pResult); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); b.addActionListener(new ActionListener() { boolean checkedpass = true; @Override public void actionPerformed(ActionEvent e) { checkedpass = true; check(tfInit,"起始资金"); check(tfRate,"每年收益"); check(tfYear,"复利年数"); check(tfInvest,"每年追加资金"); if(checkedpass){ int init = Integer.parseInt(tfInit.getText()); int rate = Integer.parseInt(tfRate.getText()); int year = Integer.parseInt(tfYear.getText()); int invest = Integer.parseInt(tfInvest.getText()); int baseSum = (year-1)*invest+init; int totalSum=(int) (invest* fuli( (1+(double)rate/100),(year-1)) + init* Math.pow((1+(double)rate/100) ,year)); int interestSum = totalSum -baseSum; tfBaseSum.setText(String.format("%,d",baseSum)); tfInterestSum.setText(String.format("%,d",interestSum)); tfTotalSum.setText(String.format("%,d",totalSum)); } } private int fuli(double rate, int year){ int result = 0; for(int i=year;i>0;i--){ result+=Math.pow(rate,i); } return result; } private void check(JTextField tf, String msg) { if(!checkedpass) return; String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(f, msg + " 不能为空"); tf.grabFocus(); checkedpass = false; return; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(f, msg + " 必须是整数"); tf.grabFocus(); checkedpass = false; } } }); } }
步骤 11 :

练习-进度条

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
设计一个线程,每隔100毫秒,就把进度条的进度+1。

从0%一直加到100%

刚开始加的比较快,以每隔100毫秒的速度增加,随着进度的增加,越加越慢,让处女座的使用者,干着急

变得多慢,根据你们和处女座同学,朋友的相处体验,自己把控
练习-进度条
步骤 12 :

答案-进度条

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

2分6秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.JTextArea; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JProgressBar pb = new JProgressBar(); pb.setMaximum(100); pb.setValue(0); pb.setStringPainted(true); new Thread(){ public void run(){ int sleep = 100; for (int i = 0; i < 100; i++) { pb.setValue(i+1); try { Thread.sleep(sleep+ i*10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); f.add(pb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
步骤 13 :

练习-显示文件夹复制进度条

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
改进练习-复制文件夹提供进度条,把文件复制的进度显示出来。
练习-显示文件夹复制进度条
步骤 14 :

答案-显示文件夹复制进度条

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

6分12秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JTextField; public class TestGUI { static long allFileSize = 0; // 所有需要复制的文件大小 static long currentFileSizeCopied = 0;// 已复制的文件总大小 /** * 遍历文件夹获取文件夹内容总大小 * * @param file */ public static void calclateAllFilesize(File file) { if (file.isFile()) { allFileSize += file.length(); } if (file.isDirectory()) { File[] fs = file.listFiles(); for (File f : fs) { calclateAllFilesize(f); } } } public static void main(String[] args) { JFrame f = new JFrame("带进度条的文件夹复制"); f.setSize(450, 140); f.setLocation(200, 200); f.setLayout(new FlowLayout()); // 文件地址 JLabel lStr = new JLabel("源文件地址:"); JTextField strTf = new JTextField(""); strTf.setText("e:/JDK"); strTf.setPreferredSize(new Dimension(100, 30)); JLabel lDest = new JLabel("复制到:"); JTextField destTf = new JTextField(""); destTf.setText("e:/JDK2"); destTf.setPreferredSize(new Dimension(100, 30)); f.add(lStr); f.add(strTf); f.add(lDest); f.add(destTf); JButton bStartCopy = new JButton("开始复制"); bStartCopy.setPreferredSize(new Dimension(100, 30)); JLabel l = new JLabel("文件复制进度:"); JProgressBar pb = new JProgressBar(); pb.setMaximum(100); pb.setStringPainted(true); f.add(bStartCopy); f.add(l); f.add(pb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); // 计算需要复制的文件的总大小 String srcPath = strTf.getText(); File folder = new File(srcPath); calclateAllFilesize(folder); // 点击开始复制 bStartCopy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { currentFileSizeCopied = 0; String srcPath = strTf.getText(); String destPath = destTf.getText(); new Thread(() -> copyFolder(srcPath, destPath)).start(); bStartCopy.setEnabled(false); } public void copyFile(String srcPath, String destPath) { File srcFile = new File(srcPath); File destFile = new File(destPath); // 缓存区,一次性读取1024字节 byte[] buffer = new byte[1024]; try (FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile);) { while (true) { // 实际读取的长度是 actuallyReaded,有可能小于1024 int actuallyReaded = fis.read(buffer); // -1表示没有可读的内容了 if (-1 == actuallyReaded) break; fos.write(buffer, 0, actuallyReaded); fos.flush(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void copyFolder(String srcPath, String destPath) { File srcFolder = new File(srcPath); File destFolder = new File(destPath); if (!srcFolder.exists()) return; if (!srcFolder.isDirectory()) return; if (destFolder.isFile()) return; if (!destFolder.exists()) destFolder.mkdirs(); File[] files = srcFolder.listFiles(); for (File srcFile : files) { if (!(srcFile.isDirectory())) { File newDestFile = new File(destFolder, srcFile.getName()); copyFile(srcFile.getAbsolutePath(), newDestFile.getAbsolutePath()); currentFileSizeCopied += srcFile.length(); double current = (double) currentFileSizeCopied / (double) allFileSize; int progress = (int) (current * 100); pb.setValue(progress); if (progress == 100) { JOptionPane.showMessageDialog(f, "复制完毕"); bStartCopy.setEnabled(true); } } if (srcFile.isDirectory()) { File newDestFolder = new File(destFolder, srcFile.getName()); copyFolder(srcFile.getAbsolutePath(), newDestFolder.getAbsolutePath()); } } } }); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-01-02 是否可以描述一下练习-账号密码验证答案代码的逻辑
375098717
是否可以描述一下练习-账号密码验证答案代码的逻辑




1 个答案

林无双 答案时间:2018-01-04
我没看站长的视频啊, 1,我把整体数据库的增删改查方法做成了一个类, 2.获取账号的text,作为参数传给查方法,用查方法查这个参数对应的密码 3.判断返回的密码和用户输入的密码是否一致。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-10-31 老师问下
二重幻想



怎么看不到进度条的过程啊,一次就到100了

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class SwingTest {

    public  long count(String s) {
        File f = new File(s);
        File[] ff = f.listFiles();
        long l = 0l;
        if (f.isDirectory()) {
            for (int i = 0; i < ff.length; i++) {
                if (ff[i].isFile()) {
                    l = l + ff[i].length();
                } else if (ff[i].isDirectory()) {
                    l = l + count(ff[i].getAbsolutePath());
                }
            }
        }
        else if (f.isFile())
        {
            l=l+f.length();
        }
        return  l;
    }

    public void  showFolderCopyProgressBar()
    {
        JFrame jf=new JFrame("复制文件夹");
        jf.setSize(400,300);
        jf.setLocation(200,200);
        jf.setLayout(new FlowLayout());
        JLabel jl1=new JLabel("源文件地址:");
        JTextField jtf1=new JTextField();
        jtf1.setPreferredSize(new Dimension(80,25));
        JLabel jl2=new JLabel("复制到:");
        JTextField jtf2=new JTextField();
        jtf2.setPreferredSize(new Dimension(80,25));
        JPanel jp=new JPanel();
        jp.add(jl1);
        jp.add(jtf1);
        jp.add(jl2);
        jp.add(jtf2);
        jf.add(jp);
        JPanel jp2=new JPanel();
        JButton jb=new JButton("开始复制");
        jp2.add(jb);
        JLabel jl3=new JLabel("文件复制进度:");
        jp2.add(jl3);
        JProgressBar jpb=new JProgressBar();
        jpb.setMaximum(100);
        jpb.setMinimum(0);
        jpb.setValue(0);
        jpb.setStringPainted(true);
        jp2.add(jpb);
        jf.add(jp2);
        jb.addActionListener(new ActionListener()  {
            long cur=0;
            public void aecursively(File file,File result) throws  Exception
            {
                long all=count(jtf1.getText());
                if(!result.exists())
                {
                    result.mkdirs();
                }
                File[] f=file.listFiles();
                for(int i=0;i<f.length;i++)
                {
                    if(f[i].isFile()){
                        File target = new File(result,f[i].getName());
                        target.createNewFile();
                        FileInputStream fis = new FileInputStream(f[i]);
                        FileOutputStream fos = new FileOutputStream(target);
                        byte[] b = new byte[(int) f[i].length()];
                        fis.read(b);
                        fos.write(b);
                        cur=cur+f[i].length();
                        double pro=(double)cur/(double)all;
                        jpb.setValue((int)(pro*100));
                        Thread.sleep(1000);
                        if (jpb.getValue()==100)
                        {
                            JOptionPane.showMessageDialog(jf,"复制成功");
                            break;
                        }
                        System.out.println(jpb.getValue());
                    }
                    else
                    {
                        File ff=new File(result,f[i].getName());
                        ff.mkdirs();
                        aecursively(f[i],ff);
                    }
                }
            }
            public void actionPerformed(ActionEvent e) {
                File f1 = new File(jtf1.getText());
                File[] f = f1.listFiles();
                File f2 = new File(jtf2.getText());
                try
                {
                    aecursively(f1,f2);
                }catch (Exception E)
                {
                    E.printStackTrace();
                }

            }
        });
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
//        File f1 = new File(jtf1.getText());
//        File f2 = new File(jtf2.getText());
//        if (!jtf2.getText().equals("")) {
//            new ProgressBarUpThread(jpb, f1, f2).start();
//        }

    }
    public void progressBar()//进度条
    {
        JFrame jf=new JFrame("cc");
        jf.setSize(400,300);
        jf.setLocation(200,200);
        jf.setLayout(new FlowLayout());
        JProgressBar jpb=new JProgressBar();
        jpb.setMaximum(100);
        jpb.setMinimum(0);
//        new ProgressBarRiseThread(jpb).start();
        jf.add(jpb);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jpb.setStringPainted(true);
        jf.setVisible(true);
    }
    public void notepadPage()
    {
        JFrame jf=new JFrame();
        jf.setSize(400, 300);
        jf.setLocation(200, 200);
        JMenuBar jmb=new JMenuBar();
        JMenu jm=new JMenu("文件(F)");
        jmb.add(jm);
        jf.setJMenuBar(jmb);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
    public void accountPasswordVerification()
    {
        JFrame jf=new JFrame("自制页面3");
        jf.setSize(500,348);
        jf.setLocation(450,250);
        jf.setLayout(null);
        JLabel jl1=new JLabel("帐号:");
        jl1.setSize(100,40);
        jl1.setLocation(20,0);
        jf.add(jl1);
        JTextField jtf1=new JTextField();
        jtf1.setSize(100,20);
        jtf1.setLocation(60,10);
        jf.add(jtf1);
        JLabel jl2=new JLabel("密码:");
        jl2.setSize(100,40);
        jl2.setLocation(200,0);
        jf.add(jl2);
        JTextField jtf2=new JTextField();
        jtf2.setSize(100,20);
        jtf2.setLocation(240,10);
        jf.add(jtf2);
        JButton jb=new JButton("登录");
        jb.setSize(65,43);
        jb.setLocation(130,61);
        jb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(jtf1.getText().equals("")|jtf2.getText().equals(""))
                {
                    JOptionPane.showMessageDialog(jf,"用户名密码不能为空");
                }
                else
                {
                    JDBC j=new JDBC();
                    String sql="select * from User where name=? and password=?";
                    try(PreparedStatement ps=j.connect().prepareStatement(sql); )
                    {
                        ps.setString(1,jtf1.getText());
                        ps.setString(2,jtf2.getText());
                        ResultSet rs=ps.executeQuery();
                        if(rs.next())
                        {
                          JOptionPane.showMessageDialog(jf,"登录成功");
                        }
                    }catch (Exception e1)
                    {
                        e1.printStackTrace();
                    }
                }
            }
        });
        jf.add(jb);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void  digitalCalibration()//数字校验
    {
        JFrame jf=new JFrame("自制页面2");
        jf.setLayout(new FlowLayout());
        JTextField jtf=new JTextField();
        jtf.setPreferredSize(new Dimension(100,30));
        jf.add(jtf);
        JButton jb=new JButton("检测");
        jb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                char[] c=jtf.getText().toCharArray();
                boolean isNum=true;
                for(int i=0;i<c.length;i++)
                {
                       if(c[i]<'0'|c[i]>'9')
                       {
                           isNum=false;
                       }
                }
                if(!isNum)
                {
                    JOptionPane.showMessageDialog(jf,"输入框内容不是整数");
                }
            }
        });
        jf.add(jb);
        jf.setVisible(true);
    }
    public void  judgeEmpty()//判断为空
    {
        JFrame jf=new JFrame("自制页面1");
        jf.setLayout(new FlowLayout());
        JTextField jtf=new JTextField();
        jtf.setPreferredSize(new Dimension(100,30));
        jf.add(jtf);
        JButton jb=new JButton("检测");
        jb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(jtf.getText().equals(""))
                {
                    JOptionPane.showMessageDialog(jf,"文本内容为空");
                }
            }
        });
        jf.add(jb);
        jf.setVisible(true);
    }
    public void memoryOffPosition()//在上次关闭位置启动窗口,模态窗口
    {
        File f=new File("lol.txt");
        SwingTest st=new SwingTest();
        System.out.println( st.getLocation(f));
        JFrame jf=new JFrame("cc");
        jf.setSize(1000,1000);
        jf.setLayout(null);
        if (st.getLocation(f)!=null)
        {
            int x=Integer.valueOf((String)st.getLocation(f).get(0));
            int y=Integer.valueOf((String)st.getLocation(f).get(1));
            jf.setLocation(x,y);
        }
        else {
            jf.setLocation(400, 400);
        }
        JLabel jl=new JLabel();
        ImageIcon ii=new ImageIcon("C:/Users/Administrator/Downloads/壁纸.png");
        jl.setIcon(ii);
        jl.setSize(ii.getIconWidth()/2,ii.getIconHeight()/2);
        jl.setLocation(50,50);
        JButton jbu=new JButton("打开一个模态窗口");
        jbu.setLocation(100,100);
        jbu.setSize(171,113);
        jbu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JDialog jd=new JDialog();
                jd.setSize(300,300);
                jd.setLocation(100,100);
                jd.setTitle("这是一个模态窗口");
                jd.setModal(true);
                JButton jb=new JButton("锁定大小");
                jb.setLocation(100,100);
                jb.setSize(17,13);
                jb.addActionListener(new ActionListener() {

                    int temp=0;
                    public void actionPerformed(ActionEvent e) {
                        temp++;
                        if(temp%2==1)
                        {
                            jd.setResizable(false);
                            jb.setText("解锁大小");
                        }
                        else
                        {
                            jd.setResizable(true);
                            jb.setText("锁定大小");
                        }

                    }
                });
                jd.add(jb);
                jd.setVisible(true);
            }

        });
        JButton jb=new JButton("隐藏图片");
        jb.setSize(100,100);
        jb.setLocation(20,20);
        jb.addActionListener(new ActionListener() {
            int temp=0;
            public void actionPerformed(ActionEvent e) {
                temp++;
                if(temp%2==1)
                {
                    jl.setVisible(false);
                    jb.setText("显示图片");
                }
                else
                {
                    jb.setText("隐藏图片");
                    jl.setVisible(true);
                }
            };
        });
        jf.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {

            }

            public void keyPressed(KeyEvent e) {

            }
            public void keyReleased(KeyEvent e) {
                if(e.getKeyCode()==39)
                {
                    jl.setLocation(jl.getX()+10,jl.getY());
                }
            }
        });
        jf.add(jb);
        jf.add(jl);
        jf.add(jbu);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        new SetLocationThread(jf).start();
    }
    public void setLocation(JFrame j,File f)
    {
         try(FileWriter fw=new FileWriter(f))
         {
             String s=j.getX()+","+j.getY();
             char[] c=s.toCharArray();
            fw.write(c);
         }
         catch(Exception e)
         {
             e.printStackTrace();
         }
    }
    public List getLocation(File f)
    {
        List l=new ArrayList();
        try(FileReader fr=new FileReader(f);)
        {
            char[] c=new char[(int)f.length()];
            fr.read(c);
            String[] s=new String(c).split(",");
            l.add(s[0]);
            l.add(s[1]);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return  l;

    }
    public static void main(String args[]) throws Exception
    {
       SwingTest st=new SwingTest();
//               st.memoryOffPosition();
            st.showFolderCopyProgressBar();
    }
}

							


1 个答案

小狼 答案时间:2017-12-25
同学你这个代码的长度吓到宝宝了。。。更别说米啵老师。。看到就头疼。。你起码只放出来关于你这个问题的代码呀。。。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-09-18 练习-显示文件夹复制进度条
2017-08-29 显示文件复制进度条
2017-08-03 黄鹤练习
2017-07-17 带进度条的文件夹复制,一个修改建议
2017-04-19 深感debug能力的重要性
2017-02-27 92行关于线程的代码不懂
2017-02-21 为什么不对呢?
2017-02-20 简单答案
2017-02-20 简单提示
2016-12-14 文件复制咋么没效果




提问之前请登陆
关于 JAVA 中级-图形界面-组件综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图