⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendlistdialog.java

📁 局域网飞鸽传输
💻 JAVA
字号:
/**
  * @(#)frm.SendListDialog.java  2008-10-9  
  * Copy Right Information	: Tarena
  * Project					: IPMsg
  * JDK version used		: jdk1.6.4
  * Comments				: 准备传送文件列表窗口。
  * Version					: 1.0
  * Sr	Date		Modified By		Why & What is modified
  * 1.	2008-10-9 	小猪     		新建
  **/
package frm;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.Toolkit;
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.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;

import tools.FileInfo;

 /**
 * 准备传送文件列表窗口。
 * 2008-10-9
 * @author		达内科技[Tarena Training Group]
 * @version	1.0
 * @since		JDK1.6(建议) 
 */
@SuppressWarnings("serial")
public class SendListDialog extends JDialog implements ActionListener{

	/** 传送文件的列表JTalbe */
	private JTable tableList = null;
	/** talbeList的model */
	public MyDefaultTableModel model =null;
	/** 添加文件按钮 */
	private JButton btnAddFile = new JButton("添加文件");
	/** 添加文件夹按钮 */
	private JButton btnAddDirectory = new JButton("添加文件夹");
	/** 删除按钮 */
	private JButton btnDelete = new JButton("删除");
	/** 关闭按钮 */
	private JButton btnClose = new JButton("关闭");
	/** 父窗体 */
	private Frame owner = null;
	/** 传送文件的列表 */
	//private Vector<String> list = new Vector<String>();
	
	public SendListDialog(Frame owner, boolean modal,boolean isShow) {
		super(owner,modal);
		this.owner = owner;
		setTitle("准备传送的文件列表");
		setSize(400,170);
		//setMinimumSize(new Dimension(300,210));
		setResizable(false);
		Toolkit tk=Toolkit.getDefaultToolkit();
		setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2);
		try {
			setIconImage(ImageIO.read(getClass().getResource("/frm/img/ipmsg.gif")));
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		init();
		addWindowListener(new MyWindowAdapter());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setVisible(isShow);
	}
	
	/**
	 * 初始化面板。
	 */
	@SuppressWarnings("unchecked")
	private void init(){
		btnAddFile.setPreferredSize(new Dimension(75,25));
		btnAddFile.setMargin(new Insets(0,0,0,0));
		btnAddFile.addActionListener(this);
		btnAddDirectory.setPreferredSize(new Dimension(75,25));
		btnAddDirectory.setMargin(new Insets(0,0,0,0));
		btnAddDirectory.addActionListener(this);
		btnDelete.setPreferredSize(new Dimension(75,25));
		btnDelete.setMargin(new Insets(0,0,0,0));
		btnDelete.addActionListener(this);
		btnClose.setPreferredSize(new Dimension(75,25));
		btnClose.setMargin(new Insets(0,0,0,0));
		btnClose.addActionListener(this);
		
		model = new MyDefaultTableModel();
		String[] columns = {"文件名","大小","位置"};
		for(String cloumn:columns)
			model.addColumn(cloumn);
		tableList = new JTable(model);
		TableRowSorter sorter = new TableRowSorter(model); 
		tableList.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		tableList.setRowSorter(sorter);
		tableList.setFillsViewportHeight(true);
		TableColumn cloumn0 = tableList.getColumn(columns[0]);
		cloumn0.setPreferredWidth(115);
		TableColumn cloumn1 = tableList.getColumn(columns[1]);
		cloumn1.setPreferredWidth(60);
		//cloumn1.set
		TableColumn cloumn2 = tableList.getColumn(columns[2]);
		cloumn2.setPreferredWidth(200);
		((DefaultTableCellRenderer)tableList.getCellRenderer(0, 1)).setHorizontalAlignment(SwingConstants.CENTER);
		
		JPanel paneBottom = new JPanel();
		paneBottom.setLayout(new FlowLayout(FlowLayout.LEFT,8,8));
		paneBottom.setPreferredSize(new Dimension(200,43));
		paneBottom.add(btnAddFile);
		paneBottom.add(btnAddDirectory);
		paneBottom.add(btnDelete);
		paneBottom.add(new FillWidth(45,25));
		paneBottom.add(btnClose);
		
		add(new FillWidth(8,8),BorderLayout.NORTH);
		add(new FillWidth(8,8),BorderLayout.EAST);
		add(new FillWidth(8,8),BorderLayout.WEST);
		add(new JScrollPane(tableList));
		add(paneBottom,BorderLayout.SOUTH);
	}
	
	/**
	 * 按钮点击事件。
	 */
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==btnAddFile){
			DirectoryChoose chooser = new DirectoryChoose(this,"添加文件",JFileChooser.FILES_ONLY);
			File file = chooser.getSelectedFile();
			model.addFile(file);
			return;
		}
		if(e.getSource()==btnAddDirectory){
			DirectoryChoose chooser = new DirectoryChoose(this,"添加文件夹",JFileChooser.DIRECTORIES_ONLY);
			File file = chooser.getSelectedFile();
			model.addFile(file);
			return;
		}
		if(e.getSource()==btnDelete){
			
			//while(tableList.getSelectedRow()!=-1)
				//model.removeRow(tableList.getSelectedRow());
			int[] rows = tableList.getSelectedRows();
			for(int i = rows.length-1;i>=0;i--)
				model.removeRow(i);
			return;
		}
		if(e.getSource()==btnClose){
			close();
			return;
		}
	}
	
	/**
	 * 获取传送文件列表的文件名组成的字符串
	 * @return 文件名组成的字符串,用空格隔开。
	 */
	public String getSendFile(){
		String str = "";
		for(int i=0;i<model.getRowCount();i++)
			str += model.getValueAt(i, 0)+" ";
		return str.substring(0,str.length());
	}
	
	/**
	 * 获取发送的目录路径。
	 * @return 发送的目录路径。
	 */
	public String getSendPath(){
		String path = "<";
		for(int i=0;i<model.getRowCount();i++){
			File file = model.getFile(i);
			if(file!=null && file.exists() && file.canRead()){
				path += "[";
				if(file.isFile())
					path += "1";
				else
					path += "0";
				path += "]?"+file.getAbsolutePath()+"?"+file.getName()+"|";
			}
		}
		if(path.endsWith("|"))
			path = path.substring(0,path.length()-1);
		path += ">";
		return path;
	}
	
	/**
	 * 获取发送文件的列表。
	 * @return 返回发送文件的列表。
	 */
	public String getSendList(){
		String path = "";
		for(int i=0;i<model.getRowCount();i++){
			File file = model.getFile(i);
			if(file!=null && file.exists() && file.canRead()){
				path += file.getAbsolutePath() + "|";
			}
		}
		return path;
	}
	
	/**
	 * 清空发送后的内容。
	 */
	public void clearSendList(){
		model.setRowCount(0);
	}
	
	/**
	 * table的Model
	 */
	public class MyDefaultTableModel extends DefaultTableModel{
		@Override
		public boolean isCellEditable(int row, int column) {
			return false;
		}
		
		public boolean addFile(File file){
			if(file!=null && file.exists() && file.canRead() && !isExitFile(file)){
				String[] row = {file.getName(),FileInfo.getFileLength(file),file.getParent()};
				addRow(row);
				return true;
			}
			return false;
				
		}
		
		public boolean isExitFile(File file){
			if(file==null) return false;
			for(int i=0;i<getRowCount();i++){
				File xfile = getFile(i);
				if(xfile!=null && xfile.exists() && xfile.equals(file))
					return true;
			}
			return false;
		}
		
		public File getFile(int n){
			File file = new File(getValueAt(n, 2).toString()+File.separator+getValueAt(n, 0).toString());
			if(file!=null && file.exists() && file.canRead())
				return file;
			else
				return null;
		}
	}
	
	/**
	 * 窗体关闭方法。
	 */
	private void close(){
		dispose();
		if(owner instanceof IPMsgMainFrm){
			IPMsgMainFrm main = (IPMsgMainFrm)owner;
			main.setSendFileList(getSendFile());
		}
	}
	
	/**
	 * 窗体关闭时触发事件。
	 */
	private class MyWindowAdapter extends WindowAdapter{
		public void windowClosing(WindowEvent e) {
			close();
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -