package com.hz.weep;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Panel;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 * 一个简单的ui,用来进行文件合并 可以把一个压缩包和图片合成一个文件 拓展名打开方式为图片拓展名则打开为图片 拓展名为压缩文件拓展名则打开为压缩文件.
 * 
 * @author weep
 * 
 */
public class MyMergeFileMachine extends DropTargetAdapter {
	public JFrame jframe;
	public JList jlist;
	public DefaultListModel dlm;
	public JTextField text;

	/**
	 * 创建程序主界面,基本的布局和按钮监听.
	 */
	public MyMergeFileMachine() {
		jframe = new JFrame("文件合并工具-百度[世态炎凉一依然]吧");
		dlm = new DefaultListModel();
		jlist = new JList(dlm);
		jlist.setDropTarget(new DropTarget(jlist,
				DnDConstants.ACTION_REFERENCE, this, true));
		jframe.add(jlist);

		Panel panel = new Panel();
		panel.setBounds(0, 0, 200, 30);
		panel.setBackground(Color.white);
		text = new JTextField();
		text.setBounds(0, 200, 200, 20);
		
		text.setText("d:\\默认合成文件.jpg");
		JButton submit = new JButton("合并");
		JButton upMove = new JButton("上移");
		JButton delete = new JButton("删除");
		JButton close = new JButton("关闭");
		
		close.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		delete.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Integer index = jlist.getAnchorSelectionIndex();
				if (index != null && index >= 0
						&& jlist.getModel().getSize() > 1) {
					dlm.remove(index);
				} else if (index == 0 && jlist.getModel().getSize() == 1) {
					dlm.removeAllElements();
				}
			}
		});
		upMove.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Integer index = jlist.getAnchorSelectionIndex();
				if (index > 0) {
					Object temp1 = dlm.get(index - 1);
					dlm.remove(index - 1);
					dlm.add(index, temp1);
				}
			}
		});
		
		submit.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				List<String> list = new ArrayList<String>();
				for (int i = 0; i < dlm.size(); i++) {
					list.add(dlm.getElementAt(i).toString());
				}
				try {
					if (list.size() != 0) {
						addFile(list, text.getText());
					} else {
						JOptionPane.showMessageDialog(jframe, "请添加文件");
					}
				} catch (Exception e1) {
					e1.printStackTrace();
					System.err.println("擦 了 异常了!");
				}
			}
		});

		panel.add(submit);
		panel.add(upMove);
		panel.add(delete);
		panel.add(close);

		jframe.add(text, BorderLayout.BEFORE_FIRST_LINE);
		jframe.add(panel, "South");
		jframe.setSize(350, 300);
		jframe.setLocationRelativeTo(null);
		jframe.setAlwaysOnTop(true);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe.setVisible(true);

	}
	
	/**
	 * 继承DropTargetAdapter抽象类,实现拖拽功能.
	 */
	@SuppressWarnings("unchecked")
	public void drop(DropTargetDropEvent dtde) {
		dtde.acceptDrop(DnDConstants.ACTION_REFERENCE);
		Transferable tf = dtde.getTransferable();
		try {
			List<File> list = (List<File>) tf
					.getTransferData(DataFlavor.javaFileListFlavor);
			for (File f : list) {
				dlm.addElement(f);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 像列表中添加新row.
	 * @param file
	 * @param target
	 * @throws Exception
	 */
	public void addFile(List<String> file, String target) throws Exception {
		String message = "";
		String files = "";
		for (String s : file) {
			files += " " + s + " +";
		}
		files = files.substring(0, files.length() - 2);
		System.out.println(files);
		// 核心代码,利用windows的copy命令进行文件合并
		Process p = Runtime.getRuntime().exec(
				"cmd /c copy /b " + files + " " + target);
		BufferedReader pw = new BufferedReader(new InputStreamReader(
				p.getInputStream()));
		String str = "";
		int i = 0;
		while ((str = pw.readLine()) != null) {
			i++;
			if (i > 1) {
				System.out.println(str.substring(12));
			} else {
				System.out.println(str);
			}

		}

		JOptionPane.showMessageDialog(jframe, "位置:" + target);
	}

	/**
	 * 运行主程序
	 * @param args
	 */
	public static void main(String[] args) {
		new MyMergeFileMachine();
	}
}
最近下载更多
pr_pengrui  LV1 2019年9月11日
飞翔的企鹅嗯嗯  LV11 2019年1月30日
zq1212123123  LV1 2018年4月18日
ybbghdiu  LV27 2015年7月23日
mr.kang  LV25 2014年8月4日
Tonfay  LV26 2013年6月28日
是非黑白  LV8 2012年9月24日
春暖花开  LV8 2012年9月7日
最代码官方  LV167 2012年9月7日
最近浏览更多
crosa_Don  LV18 2022年9月15日
gaowei96  LV1 2021年7月25日
LI4985823  LV1 2021年6月9日
chencrazy  LV3 2021年3月17日
AG6010 2020年10月21日
暂无贡献等级
林小小小小  LV1 2020年5月13日
疯子也有疯子的情调  LV2 2020年5月7日
2252536772  LV21 2020年4月21日
lt33333  LV7 2020年4月9日
batchina  LV2 2019年10月16日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友