GUI---深度复制

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class MyWindow {
    public static void main(String[] args) {
        //创建窗口
        JFrame frame=new JFrame("我的第一个窗口");
        //设置大小
        frame.setSize(800,600);
        //位置,左上角原点坐标
        frame.setLocation(100,100);
        
        //设置jframe的布局为null
        frame.setLayout(null);
        
        //创建按钮
        JButton button=new JButton("确定"    );
        //设置边界==大小+位置(相对于所在容器的)
        button.setBounds(0, 0, 100, 50);
        
        //给按钮添加监听器
        button.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.dispose();
            }
        });
        
        //将按钮添加给容器
        frame.add(button);
        frame.show();
        
    }
}

记事本:

package gui;

import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * 主窗口
 * @author ASUS
 *
 */
public class MainFrame extends JFrame implements ActionListener{

    /**
     * 
     */
    private static final long serialVersionUID = -8026416994513756565L;
    //按钮
    private JButton btnOK;
    private JButton btnCancel;
    private JTextArea txtArea;
    
    //菜单项
    private JMenuItem miOpen;
    private JMenuItem miExit;

    public MainFrame() {
        initFrame();
        this.setVisible(true);
        
    }
    /**
     * 初始化
     */
    private void initFrame() {
        //标题
        this.setTitle("主窗口");
        //边界
        this.setBounds(100, 100, 820, 600);
        
        //绝对布局
        this.setLayout(null);
        
        Font font=new Font("微软雅黑",Font.BOLD,27);
        
        //将文本域添加到滚动面板中
        txtArea = new JTextArea();
        txtArea.setFont(font);
        
        //滚动面板
        JScrollPane scrollPane=new JScrollPane(txtArea);
        scrollPane.setBounds(0,0,800,470);
        this.add(scrollPane);
        
        btnOK = new JButton("保存");
        btnOK.setBounds(500, 475, 100, 50);
        btnOK.setFont(font);
        btnOK.addActionListener(this);
        this.add(btnOK);
        
        btnCancel = new JButton("取消");
        btnCancel.setBounds(610, 475, 100, 50);
        btnCancel.setFont(font);
        btnCancel.addActionListener(this);
        this.add(btnCancel);
        
        //添加窗口事件处理程序,使用适配器
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(-1);
            }
        });
        
        //添加菜单栏
        JMenuBar menuBar=new JMenuBar();
        //添加菜单
        JMenu menu=new JMenu("文件");
        
        miOpen = new JMenuItem("打开");
        miOpen.addActionListener(this);
        //添加菜单项
        menu.add(miOpen);
        
        //分隔符
        menu.addSeparator();
        miExit = new JMenuItem("退出");
        menu.add(miExit);
        miExit.addActionListener(this);
        
        menuBar.add(menu);
        
        this.setJMenuBar(menuBar);
    }
    /**
     * 动作处理程序
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        //得到事件的源
        Object es=e.getSource();
        //保存文件
        if(es==btnOK) {
            try {
                //打开保存对话框,定位保存文件的位置
                FileDialog d=new FileDialog(this, "保存", FileDialog.SAVE);
                d.setVisible(true);
                File f= new File(d.getDirectory(),d.getFile());
                
                String str=txtArea.getText();
                FileWriter writer=new FileWriter(f);
                writer.write(str);
                writer.close();
                txtArea.setText("");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }else if(es==btnCancel) {
            this.dispose();
        }
        //是否是菜单项
        else if(es==miOpen) {
            
            FileDialog d=new FileDialog(this,"打开",FileDialog.LOAD);
            d.setVisible(true);
            String dir=d.getDirectory();
            String f=d.getFile();
            if(dir!=null && f!=null) {
                try {
                    txtArea.setText(null);
                    FileReader reader = new FileReader(new File(dir,f));
                    char[] buffer=new char[1024];
                    int len=-1;
                    while((len=reader.read(buffer))!=-1) {
                        txtArea.setText(txtArea.getText()+new String(buffer,0,len));
                    }
                    reader.close();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
        else if(es==miExit) {
            System.exit(-1);
        }
    }
}
package gui;

public class MyEdito {
    public static void main(String[] args) {
        MainFrame frame=new MainFrame();
    }
}

深度复制:

package mulcopier;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;

/**
*@author :王团结
*@version: 2019年6月18日下午10:51:22
*类说明:
*复制器
*/
public class Copier {
    private CopyUI copyui;
    //源文件
    private String srcFile;
    //目标目录
    private String destDir;
    //线程数
    private int count;
    
    
    public Copier(CopyUI copyui,String srcFile, String destDir, int count) {
        super();
        this.copyui=copyui;
        this.srcFile = srcFile;
        this.destDir = destDir;
        this.count = count;
    }
    
    /**
     * 开始复制文件
     */
    public void startCopy() {
        int start=0;
        int end=0;
        RandomAccessFile raf=null;
        try {
            
            //计算源文件大小
            raf = new RandomAccessFile(srcFile, "r");
            int fileLength=(int)raf.length();
            
            //设置进度条的最大值 
            copyui.bar.setMaximum(fileLength);
            //每个线程复制的块大小
            int block=fileLength/count;
            
            
            for(int i=0;i<count;i++) {
                start=i*block;
                if(i!=(count-1)) {
                    end=(i+1)*block-1;
                }else {
                    end=fileLength-1;
                }
                new CopyThread(copyui,srcFile,destDir,start,end).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package mulcopier;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

/**
 * 主窗口
 * @author ASUS
 *
 */
public class CopyUI extends JFrame implements ActionListener{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    //srcFile
    private JLabel lblSrcFile;
    private JTextField tfSrcFile;
    
    //DestDir
    private JTextField tfDestDir;
    private JLabel lblDestDir;
    
    //线程数
    private JLabel lblCount;
    private JTextField tfCount;
    
    //开始按钮
    private JButton btnStart;
    
    public JProgressBar bar;
    
    public CopyUI() {
        init();
        
    }
    private void init() {
        this.setTitle("主窗口");
        this.setBounds(100,100,800,600);
        this.setLayout(null);
        
        //SrcFile标签
        lblSrcFile = new JLabel("源文件");
        lblSrcFile.setBounds(10, 10, 80, 30);
        this.add(lblSrcFile);
        
        tfSrcFile = new JTextField();
        tfSrcFile.setText("D:\\学习\\02大数据基础Hadoop 2.X\\大数据软件工具\\hadoop-2.5.0-cdh5.3.6-src.tar.gz");
        tfSrcFile.setBounds(80, 10, 600, 30);
        this.add(tfSrcFile);
        
        //DestDir标签
        lblDestDir = new JLabel("目标目录");
        lblDestDir.setBounds(10, 80, 80, 30);
        this.add(lblDestDir);
        
        
        tfDestDir = new JTextField();
        tfDestDir.setBounds(80,80, 600, 30);
        tfDestDir.setText("d:/arch/hadoop-2.5.0-cdh5.3.6-src.tar.gz");
        this.add(tfDestDir);
        
        //线程数
        lblCount = new JLabel("线程数");
        lblCount.setBounds(10, 110, 80, 30);
        this.add(lblCount);
        
        tfCount = new JTextField();
        tfCount.setBounds(80, 110, 600, 30);
        tfCount.setText(""+5);
        this.add(tfCount);
        
        //开始按钮
        btnStart = new JButton("开始");
        btnStart.setBounds(10, 160, 100, 30);
        btnStart.addActionListener(this);
        this.add(btnStart);
        
        //进度条
        bar = new JProgressBar();
        bar.setBounds(10, 200,650, 50);
//        bar.setMaximum(100);
//        bar.setValue(50);
        this.add(bar);
        
        this.setVisible(true);
        
        //设置窗口适配器
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(-1);
            }
        });
    }
    
    //添加按钮监听
    public void actionPerformed(ActionEvent e) {
        Object source=e.getSource();
        //开始按钮
        if(source==btnStart) {
            String srcFile=tfSrcFile.getText();
            String destDir=tfDestDir.getText();
            int count=Integer.parseInt(tfCount.getText());
            
            //创建复制器对象
            Copier copier=new Copier(this,srcFile, destDir, count);
            copier.startCopy();
        }
    }
}
package mulcopier;

public class App {
    public static void main(String[] args) {
        CopyUI w=new CopyUI();
    }
}
原文地址:https://www.cnblogs.com/King-boy/p/11046813.html