how2j.cn

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

步骤 1 :

练习-为空判断

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

答案-为空判断

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费2个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费2个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-数字校验

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

答案-数字校验

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费2个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费2个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-账号密码验证

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

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

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

答案-账号密码验证

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-黄鹤

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

要有为空和数字判断
练习-黄鹤
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-复利计算器

edit 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 :

答案-复利计算器

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-进度条

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

从0%一直加到100%

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

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

答案-进度条

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

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

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

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

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-04-08 作业账号密码
一分三秒



交作业
package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

public class TestGUI {
    public static void main(String[] args) {
    	JFrame f = new JFrame();
    	f.setSize(400,300);
    	f.setLocation(300,200);
    	f.setLayout(new FlowLayout());
    	JLabel l = new JLabel("账号:");
    	l.setPreferredSize(new Dimension(80,30)); 
    	f.add(l);
    	JTextField zhanghao = new JTextField();
    	zhanghao.setPreferredSize(new Dimension(80,30));
    	f.add(zhanghao);
    	JLabel ll = new JLabel("密码:");
    	ll.setPreferredSize(new Dimension(80,30)); 
    	f.add(ll);
    	JTextField mima = new JTextField();
    	mima.setPreferredSize(new Dimension(80,30));
    	f.add(mima);
    	JButton b = new JButton("登录");
    	b.setPreferredSize(new Dimension(80,30));
    	b.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				jdbc a = new jdbc(zhanghao.getText(),mima.getText());
				a.search(a.zhanghao,a.mima);
			}		
    	});
    	f.add(b);
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	f.setVisible(true);
    }
}

package gui;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.Statement;

import java.sql.Connection;

public class jdbc {
	String zhanghao;
	String mima;
	public jdbc(String zhanghao,String mima){
		this.zhanghao = zhanghao;
		this.mima = mima;
	}
    public void search(String zhanghao,String mima){
    	try{
    		Class.forName("com.mysql.jdbc.Driver");
    	}catch(ClassNotFoundException e){
    		e.printStackTrace();
    	}
    	String sql = "select * from shujv where zhanghao = ? and mima = ?";
    	try(
    		Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
    			PreparedStatement s = c.prepareStatement(sql);	
    		){
    		s.setString(1, zhanghao);
    		s.setString(2, mima);
    		ResultSet rs = s.executeQuery();
    		if(rs.next()){
    			System.out.println("账号密码正确");
    		}else{
    			System.out.println("账号密码错误");
    		}
    	}catch(SQLException e){
    		e.printStackTrace();
    	}
    }
    
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-04-03 交作业
歪脖树下自逍遥



作业二 作业三 作业四 作业五 作业六 作业七
//作业二
public class Practice1_2 {
	public static void main(String[] args) {
		JFrame frame=new JFrame();
		frame.setSize(400,250);
		frame.setLocation(300,200);
		frame.setLayout(null);
		
		JTextField textfield=new JTextField();
		textfield.setBounds(75,0,150,30);
		
		JButton validbtn=new JButton();
		validbtn.setText("检测");
		validbtn.setBounds(225, 0, 100,29);
		
		frame.add(textfield);
		frame.add(validbtn);
		
		validbtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String text=textfield.getText();
				if(text==null||text.length()==0) {
					JOptionPane.showMessageDialog(frame,"您输入的内容为空");
				}else{
					boolean validState=false;
					for(int i=0;i<text.length();i++) {
						System.out.println(text.charAt(i));
						if(!Character.isDigit(text.charAt(i))) {
							JOptionPane.showMessageDialog(frame, "输入框的内容不是整数");
							validState=true;
							break;
						}
					}
					if(!validState) JOptionPane.showMessageDialog(frame, "您输入的内容为:"+text);
				}
			}
			
		});
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

//作业三
public class Practice1_3 {
	public static void initView() {
		JFrame frame=new JFrame();
		frame.setSize(400,250);
		frame.setLocation(200,150);
		frame.setLayout(null);
		
		JLabel namelabel=new JLabel();
		namelabel.setText("账号:");
		namelabel.setBounds(50,0,40,30);
		
		JTextField namefield=new JTextField();
		namefield.setBounds(95,0,105,30);
		
		JLabel pwdlabel=new JLabel();
		pwdlabel.setText("密码:");
		pwdlabel.setBounds(205,0,40,30);
		
		JPasswordField pwdfield=new JPasswordField();
		pwdfield.setBounds(250,0,105,30);
		
		JButton signin=new JButton("登录");
		signin.setBounds(160,40,80,30);
		
		frame.add(namelabel);
		frame.add(namefield);
		frame.add(pwdlabel);
		frame.add(pwdfield);
		frame.add(signin);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		signin.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String name=namefield.getText();
				char[] pwds=pwdfield.getPassword();
				if(name==null||name.length()==0) {
					JOptionPane.showMessageDialog(frame,"账号为空,请输入账号!");
				}else if(pwds==null||pwds.length==0) {
					JOptionPane.showMessageDialog(frame, "密码为空,请输入密码1");
				}else {
					validMessage(name,String.valueOf(pwds),frame);
				}
			}
			
		});
	}
	
	public static void validMessage(String name,String pwd,JFrame frame) {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try(Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2j?characterEncoding=utf8&serverTimezone=UTC","root","123456");
				Statement s=conn.createStatement()){
			String sql="select * from gui where name='"+name+"' and pwd='"+pwd+"'";
			ResultSet rs=s.executeQuery(sql);
			if(rs.next()) {
				JOptionPane.showMessageDialog(frame, "登录成功!");
			}else {
				JOptionPane.showMessageDialog(frame, "此用户不存在!");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		initView();
	}
}

//作业四
public class Practice1_4 {
	/**
	 * 初始化界面
	 */
	public static void initView() {
		JFrame frame=new JFrame();
		frame.setSize(415,350);
		frame.setLocation(200,100);
		frame.setLayout(null);
		
		JLabel label1=new JLabel();
		label1.setText("地名:");
		label1.setBounds(10,0,90,25);
		JTextField location=new JTextField();
		location.setBounds(100,0,90,25);
		JLabel label2=new JLabel();
		label2.setText("公司类型:");
		label2.setBounds(210,0,90,25);
		JTextField firmtype=new JTextField();
		firmtype.setBounds(300,0,90,25);
		
		JLabel label3=new JLabel();
		label3.setText("公司名称:");
		label3.setBounds(10,30,90,25);
		JTextField firmname=new JTextField();
		firmname.setBounds(100,30,90,25);
		JLabel label4=new JLabel();
		label4.setText("老板名称:");
		label4.setBounds(210,30,90,25);
		JTextField bossname=new JTextField();
		bossname.setBounds(300,30,90,25);
		
		JLabel label5=new JLabel();
		label5.setText("金额:");
		label5.setBounds(10,60,90,25);
		JTextField money=new JTextField();
		money.setBounds(100,60,90,25);
		JLabel label6=new JLabel();
		label6.setText("产品:");
		label6.setBounds(210,60,90,25);
		JTextField product=new JTextField();
		product.setBounds(300,60,90,25);
		
		JLabel label7=new JLabel();
		label7.setText("价格计量单位:");
		label7.setBounds(10,90,90,25);
		JTextField unit=new JTextField();
		unit.setBounds(100,90,90,25);
		
		JButton generatebtn=new JButton();
		generatebtn.setText("生成");
		generatebtn.setBounds(157,130,100,30);
		
		JTextArea textarea=new JTextArea();
		textarea.setLineWrap(true);
		textarea.setBounds(10,180,380,120);
		
		frame.add(label1);
		frame.add(label2);
		frame.add(label3);
		frame.add(label4);
		frame.add(label5);
		frame.add(label6);
		frame.add(label7);
		
		frame.add(location);
		frame.add(firmtype);
		frame.add(firmname);
		frame.add(bossname);
		frame.add(money);
		frame.add(product);
		frame.add(unit);
		
		frame.add(generatebtn);
		frame.add(textarea);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		generatebtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String locations=location.getText();
				String firmtypes=firmtype.getText();
				String firmnames=firmname.getText();
				String bossnames=bossname.getText();
				String moneys=money.getText();
				String products=product.getText();
				String units=unit.getText();
				
				if((locations==null||locations.length()==0)
						&&(firmtypes==null||firmtypes.length()==0)
						&&(firmnames==null||firmnames.length()==0)
						&&(bossnames==null||bossnames.length()==0)
						&&(moneys==null||moneys.length()==0)
						&&(products==null||products.length()==0)
						&&(units==null||units.length()==0)) {
					JOptionPane.showMessageDialog(frame, "检测到某处输入为空!");
				}else {
					boolean judge=true;
					for(int i=0;i<moneys.length();i++) {
						if(!Character.isDigit(moneys.charAt(i))){
							JOptionPane.showMessageDialog(frame, "金额只能输入整数字符");
							judge=false;
							break;
						}
					}
					if(judge) {
						String textareas=locations+"最大的"+firmtypes+firmnames+"倒闭了,王八蛋老板"+bossnames+"吃喝嫖赌,欠下"+moneys+"个亿,带着他的小姨子跑了!我们没有办法,拿着"+products+"抵工资!原价都是一"+units+"多,两"+units+"多,三"+units+"多的"+products+",现在全部只卖二十块,统统只要二十块,"+bossnames+"王八蛋,你不是人!我们辛辛苦苦给你干了大半年,你不发工资,你还我血汗钱,还我血汗钱!";
						textarea.append(textareas);
						
					}
				}
			}
			
		});
	}
	public static void main(String[] args) {
		initView();
	}
}

//作业五
public class Practice1_5 {
	public static void initView() {
		JFrame frame=new JFrame();
		frame.setTitle("Computer");
		frame.setSize(300,330);
		frame.setLocation(200,100);
		frame.setLayout(null);

		//上半部分控件初始化
		JLabel label1=new JLabel();
		label1.setBounds(10, 0, 90,25);
		label1.setText("起始资金");
		JTextField startfund=new JTextField();
		startfund.setBounds(100, 0, 90, 25);
		JLabel label2=new JLabel();
		label2.setBounds(200, 0, 25, 25);
		label2.setText("¥");
		
		JLabel label3=new JLabel();
		label3.setBounds(10, 30, 90,25);
		label3.setText("每年收益");
		JTextField profitperY=new JTextField();
		profitperY.setBounds(100, 30, 90, 25);
		JLabel label4=new JLabel();
		label4.setBounds(200, 30, 30, 25);
		label4.setText("%");
		
		JLabel label5=new JLabel();
		label5.setBounds(10, 60, 90,25);
		label5.setText("复利年数");
		JTextField year=new JTextField();
		year.setBounds(100, 60, 90, 25);
		JLabel label6=new JLabel();
		label6.setBounds(200, 60, 25, 25);
		label6.setText("年");
		
		JLabel label7=new JLabel();
		label7.setBounds(10, 90, 90,25);
		label7.setText("每年追加资金");
		JTextField incfundperY=new JTextField();
		incfundperY.setBounds(100, 90, 90, 25);
		JLabel label8=new JLabel();
		label8.setBounds(200, 90, 25, 25);
		label8.setText("¥");
		
		JButton computebtn=new JButton();
		computebtn.setBounds(110,130,60,30);
		computebtn.setText("计算");
		
		//下半部分控件初始化
		JLabel label9=new JLabel();
		label9.setBounds(10,180, 90,25);
		label9.setText("本金和");
		JTextField fundsum=new JTextField();
		fundsum.setBounds(100,180, 90, 25);
		JLabel label10=new JLabel();
		label10.setBounds(200,180, 25, 25);
		label10.setText("¥");
		
		JLabel label11=new JLabel();
		label11.setBounds(10,210, 90,25);
		label11.setText("利息和");
		JTextField fundinc=new JTextField();
		fundinc.setBounds(100,210, 90, 25);
		JLabel label12=new JLabel();
		label12.setBounds(200,210, 25, 25);
		label12.setText("¥");
		
		JLabel label13=new JLabel();
		label13.setBounds(10,240, 90,25);
		label13.setText("本息和");
		JTextField fundallsum=new JTextField();
		fundallsum.setBounds(100,240, 90, 25);
		JLabel label14=new JLabel();
		label14.setBounds(200,240, 25, 25);
		label14.setText("¥");
		
		//将所有label添加进frame中
		frame.add(label14);
		frame.add(label13);
		frame.add(label12);
		frame.add(label11);
		frame.add(label10);
		frame.add(label9);
		frame.add(label8);
		frame.add(label7);
		frame.add(label6);
		frame.add(label5);
		frame.add(label4);
		frame.add(label3);
		frame.add(label2);
		frame.add(label1);
		
		//将所有TextField添加进frame中
		frame.add(startfund);
		frame.add(profitperY);
		frame.add(year);
		frame.add(incfundperY);
		
		frame.add(fundsum);
		frame.add(fundinc);
		frame.add(fundallsum);
		
		frame.add(computebtn);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		computebtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String str1=startfund.getText();
				String str2=profitperY.getText();
				String str3=year.getText();
				String str4=incfundperY.getText();
				if((str1==null||str1.length()==0)
						&&(str2==null||str2.length()==0)
						&&(str3==null||str3.length()==0)
						&&(str4==null||str4.length()==0)) {
					JOptionPane.showMessageDialog(frame, "检测到某处输入为空,请输入数据");
				}else {
					int num1=Integer.parseInt(str1);
					int num2=Integer.parseInt(str2);
					int num3=Integer.parseInt(str3);
					int num4=Integer.parseInt(str4);
					int output1=0;
					int output2=0;
					int output3=0;
					double ratio=1.0+num2/100.0;
					output1=num1+num4*(num3-1);
					for(int i=0;i<num3;i++) {
						output3=(int) ((output3+num4)*(ratio));
					}
					output2=output3-output1;

					fundsum.setText(output1+"");
					fundinc.setText(output2+"");
					fundallsum.setText(output3+"");
					
				}
				
			}
			
		});
	}
	
	
	public static void main(String[] args) {
		initView();
	}
}

//作业六
public class Practice1_6 {
	public static int timespan=100;
	public static int progressvalue=1;
	
	public static void controlProgress() {
		JFrame frame = new JFrame();
		frame.setSize(400,250);
		frame.setLocation(300,200);
		frame.setLayout(new FlowLayout());
		
		JProgressBar progressbar=new JProgressBar();
		
		progressbar.setMaximum(100);
		progressbar.setValue(0);
		progressbar.setStringPainted(true);
		
		Thread thread=new Thread() {
			public void run() {
				while(progressvalue<=100) {
					try {
						Thread.sleep(timespan);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					progressbar.setValue(progressvalue);
					progressvalue++;
					timespan+=20;
				}
					
			}
		};
		thread.start();
		
		frame.add(progressbar);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		controlProgress();
	}
}

//作业七
public class Practice1_7 {
	public static JProgressBar progressbar=new JProgressBar();

	public static long filesize=0;
	
	public static long progress=0;
	
	public static File destF=null;
	
	/**
	 * 初始化界面
	 */
	public static void initView() {
		JFrame frame=new JFrame();
		frame.setSize(500,150);
		frame.setLocation(300,300);
		frame.setLayout(null);
		
		JLabel label1=new JLabel();
		label1.setText("源文件地址:");
		label1.setBounds(50,10,100,25);
		JTextField srcfield=new JTextField();
		srcfield.setBounds(130, 10,120,25);
		
		JLabel label2=new JLabel();
		label2.setText("复制到:");
		label2.setBounds(270,10,60,25);
		JTextField destfield=new JTextField();
		destfield.setBounds(330, 10,120,25);
		
		JButton startcopy=new JButton();
		startcopy.setBounds(50,50,100,25);
		startcopy.setText("开始复制");
		
		JLabel label3=new JLabel("文件复制进度:");
		label3.setBounds(170,50,100, 25);
		progressbar.setMaximum(100);
		progressbar.setValue(0);
		progressbar.setBounds(270,50,179,24);
		
		frame.add(label1);
		frame.add(label2);
		frame.add(label3);
		frame.add(srcfield);
		frame.add(destfield);
		frame.add(startcopy);
		frame.add(progressbar);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		startcopy.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String src=srcfield.getText();
				String dest=destfield.getText();
				progress=0;
				filesize=0;
				copyFolder(src,dest,frame);
			}
			
		});
	}
	
	/**
     * 遍历srcF文件下的所有子文件
     * 如果子文件是文件夹,则使用destF保存该文件的路径,然后调用递归函数
     * 如果该子文件不是文件夹,则将该路径下的该子文件复制到目标文件夹
     */
    public static void listChild(File srcF,File destF) {
        File[] srcfl=srcF.listFiles();
        File dest=destF;//保存目标文件路径
        //if(srcfl[0]==null) return;//该文件夹下无文件则退出此递归函数
        for(File s:srcfl) {
            if(s.isDirectory()) {//如果子文件是文件夹,则使用destF保存该文件的路径,然后调用递归函数
                String destFolder=dest.getAbsolutePath()+"/"+s.getName();
                destF=new File(destFolder);
                destF.mkdirs();
                listChild(s,destF);
            }else {//如果该子文件不是文件夹,则将该路径下的该子文件复制到目标文件夹
                String destFolder=dest.getAbsolutePath()+"/"+s.getName();
                destF=new File(destFolder);
                //System.out.println(dest.getAbsolutePath());
                try(FileInputStream fis=new FileInputStream(s);FileOutputStream fos=new FileOutputStream(destF);){
                    long filelength=s.length();
                	byte[] buf=new byte[(int)filelength];
                    fos.write(buf);
                	progress+=filelength;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
             
        }
    }
    
    
    /**
     * 获取源文件路径下的所有文件的总大小
     * 只有当获取完总大小后才能加载进度条
     * 所以当文件过大或过多时进度条的进度会在相当长的一段时间内一直为零(懒得改了,暂时没想到好办法)
     * @param srcF
     */
    public static void countSize(File srcF) {
        File[] srcfl=srcF.listFiles();
        //if(srcfl[0]==null) return;//该文件夹下无文件则退出此递归函数
        for(File s:srcfl) {
            if(s.isDirectory()) {//如果子文件是文件夹,则使用destF保存该文件的路径,然后调用递归函数
                countSize(s);
            }else {//如果该子文件不是文件夹,则将该路径下的该子文件复制到目标文件夹
                try(FileInputStream fis=new FileInputStream(s)){
                    long filelength=s.length();
                	filesize+=filelength;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
             
        }
    }
    
    /**
     * 从TextField获取到源文件路径和目标文件路径
     * 开启两个线程,一个线程用来加载进度条
     * 另一个线程用来复制文件并统计已复制的文件的总大小
     * @param srcFolder
     * @param destFolder
     * @param frame
     */
    public static void copyFolder(String srcFolder,String destFolder,JFrame frame) {
        File srcF=new File(srcFolder);
        destF=new File(destFolder);
        if((!srcF.isDirectory())||(!destF.isDirectory())) {
            JOptionPane.showMessageDialog(frame, "输入的路径有误!");
            return;
        }
        destFolder=destFolder+"/"+srcF.getName();
        destF=new File(destFolder);
        destF.mkdirs();
        
        Thread thread=new Thread() {//统计源文件路径下的文件总大小
        	public void run() {
        		while(true) {
        			if(filesize!=0) {
        				int value=(int)(progress*100/filesize);
		            	//System.out.println(value+" "+progress+" "+filesize);
		                progressbar.setValue(value);
        			}
	                try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
        		}
	        		
        	}
        };
        Thread thread1=new Thread() {
        	public void run() {
        		countSize(srcF);//获取文件总大小
        		listChild(srcF,destF);//复制文件夹
        	}
        };
        thread.setDaemon(true);//将该线程设置为守护线程,复制完文件后则可以自动关闭此线程
        thread.start();
        thread1.start();

       
    }
	
	public static void main(String[] args) {
		initView();
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-03-23 作业(复制文件进度条)
2019-03-23 作业!复制文件
2019-03-22 作业(复利)
2019-03-22 作业,进度条
2019-03-21 作业(黄鹤)
2019-03-21 作业(为空,数字,密码)
2019-03-21 作业5!
2019-03-18 作业 4!
2019-03-18 作业 4!
2019-03-02 文件复制进度练习,debug多次终于完成
2019-03-01 练习---账号密码验证
2019-01-25 登录界面
2019-01-11 计算文件夹内容大小方法调用
2018-12-26 更简单的黄鹤
2018-12-19 作业
2018-12-12 分享一下个人解法
2018-11-17 为什么复制之后的文件会出现编码错误?
2018-09-12 关于try catch里面放return的问题
2018-09-11 getText问题
2018-08-18 关于网格布局器和容器、组件的大小问题
2018-08-01 关于进度条一下跳到100的解决方案
2018-04-07 进度无法显示0和100中间数
2018-03-28 第一个练习题疑问
2018-03-22 为啥这里要用线程
2018-01-25 站长,我验证了一下,你计算复利的方式有问题啊!!
2018-01-25 站长,我验证了一下,你计算复利的方式有问题啊!!
2018-01-02 是否可以描述一下练习-账号密码验证答案代码的逻辑
2017-10-31 老师问下
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群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图