xinjiandialog.java

来自「一款JAVA开发的类迅雷的多线程下载系统,希望对大家有帮助」· Java 代码 · 共 291 行

JAVA
291
字号
package downfile;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.table.TableColumn;
public class XinJianDialog extends JDialog implements ActionListener,KeyListener{
	JLabel urllb = new JLabel("下载地址:");
	JLabel menulb = new JLabel("存储目录:");
	JLabel filenamelb = new JLabel("文件名:");
	JTextField urljtf = new JTextField();
	JTextField filenamejtf = new JTextField();
	JTextField lujinjtf = new JTextField();
	JComboBox list = new JComboBox();
	JScrollPane scrollpane = new JScrollPane();
	JLabel adlb = new JLabel(MainFrame.main.getImageIcon(5));
	JButton okjbn = new JButton("确定");
	JButton canceljbn = new JButton("取消");
	JButton liulanjbn = new JButton("浏览");
	DownloadsTableModel m_tablemodel;
	String filename = null;
	String Path = "";
	TreeModel treemodel;
	JFileChooser chooser;
	XinJianDialog(JFrame parent,String title,DownloadsTableModel tablemodel){
		 super(parent,title,true);
  	     JPanel panel = new JPanel();
  	     setSize(400,250);
  	     panel.setLayout(null);
  	     list.addItem("已下载");
  	     for(int i=0;i<MainFrame.leadNodeList.size();i++){
  	    	 TreeModel treemodel = (TreeModel)MainFrame.leadNodeList.get(i);
  	    		 list.addItem(treemodel.name);
  	     }
  	     list.addItem("新建类别");
  	     urllb.setBounds(new Rectangle(10,100,80,24));
  	     panel.add(urllb);
  	     urljtf.setBounds(new Rectangle(90,100,250,24));
	     menulb.setBounds(new Rectangle(10,130,70,24));
	     panel.add(menulb);
  	     list.setBounds(new Rectangle(90,130,90,24));
  	     panel.add(list);
  	     adlb.setBounds(new Rectangle(10,10,380,80));
  	     panel.add(adlb);
  	     lujinjtf.setBounds(new Rectangle(190,130,100,24));
  	     lujinjtf.setEditable(false);
  	     panel.add(lujinjtf);
  	     panel.add(urljtf);
  	     liulanjbn.setBounds(new Rectangle(310,130,60,24));
  	     panel.add(liulanjbn);
  	     filenamelb.setBounds(new Rectangle(10,160,80,24));
  	     panel.add(filenamelb);
  	     filenamejtf.setBounds(new Rectangle(90,160,250,24));
  	     panel.add(filenamejtf);
  	     okjbn.setBounds(new Rectangle(200,190,60,24));
  	     panel.add(okjbn);
  	     canceljbn.setBounds(new Rectangle(270,190,60,24));
  	     panel.add(canceljbn);
  	     setContentPane(panel);
  	     okjbn.addActionListener(this);
  	     canceljbn.addActionListener(this);
 	     list.addActionListener(new ActionListener(){
  	    	 public void actionPerformed(ActionEvent e){
  	    		String name = list.getItemAt(list.getSelectedIndex()).toString();		
  	    		if(name.equals("新建类别")){
  	    			XinJianLeiBieDialog xinjianleibie = new XinJianLeiBieDialog(MainFrame.main,"新建类别",
  	    					MainFrame.treeModel,MainFrame.node2);
    	    		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    	            Dimension mainSize = xinjianleibie.getSize();
    	            xinjianleibie.setLocation((screenSize.width - mainSize.width) / 2,
    	                 (screenSize.height - mainSize.height) / 2);
    	    	    xinjianleibie.setResizable(false);
    	    	    xinjianleibie.setVisible(true);  
    	    	    
    	    	    list.removeAllItems();
    	    	    list.addItem("已下载");
    	     	     for(int i=0;i<MainFrame.leadNodeList.size();i++){
    	     	    	 TreeModel treemodel = (TreeModel)MainFrame.leadNodeList.get(i);
    	     	    		 list.addItem(treemodel.name);
    	     	     }
    	     	     list.addItem("新建类别");    	     	     
    	     	     list.setSelectedIndex(MainFrame.leadNodeList.size());
  	    		  }
  	    		name = list.getItemAt(list.getSelectedIndex()).toString();
				treemodel = (TreeModel)
				MainFrame.getTreeModel(name);
				if(treemodel == null){
					treemodel = MainFrame.node2;
				}
				Path = treemodel.lujing;
				lujinjtf.setText(Path);
				chooser = new JFileChooser(treemodel.lujing);  	    		
  	    	 }
  	     });
 	     urljtf.addKeyListener(this);
 	     filenamejtf.addKeyListener(this);
 	     liulanjbn.addActionListener(this);
  	     m_tablemodel = tablemodel;
  	     if(treemodel == null){
  	    	 treemodel = MainFrame.node2;
  	     }
  	     lujinjtf.setText(treemodel.lujing);
  	     chooser = new JFileChooser(treemodel.lujing);
	 }
	public String verifyHttpUrl(String url){
		if(!url.toLowerCase().startsWith("http://"))
			return null;		
		return url;
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == liulanjbn){
			int r = 0;
			chooser.setDialogTitle("选择文件夹");
			chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			chooser.showDialog(this,"选择");
			if (r == JFileChooser.APPROVE_OPTION) { 
				if(chooser.getSelectedFile()!=null){
				     Path = chooser.getSelectedFile().getAbsolutePath(); 
                     lujinjtf.setText(Path);
                     treemodel.lujing = Path;
				  }else{
					  Path = treemodel.lujing;
				  }
			} 
		}
		if(e.getSource()==okjbn){
			addTask();
		}
		if(e.getSource()==canceljbn){
			dispose();
		}		
	}
	public void addTask(){
		String verifiedHttpUrl = verifyHttpUrl(urljtf.getText());
		if(verifiedHttpUrl != null){
			  if(isExist(verifiedHttpUrl)){
				  dispose();
				 JOptionPane.showMessageDialog(this,
							"此地址已经存在!!");
			  }else{
			String filename = filenamejtf.getText();
			if(Path.equals("")){
				Path = MainFrame.node2.lujing;
			}
			m_tablemodel.addDownload(new Download(verifiedHttpUrl,SetUpDialog.kuaishu,filename,Path));		
			String name = list.getItemAt(list.getSelectedIndex()).toString();
			TreeModel treemodel = (TreeModel) MainFrame.getTreeModel(name);
			m_tablemodel.setTreeModel(treemodel);
			urljtf.setText("");
			dispose();
		  }
		}else if(urljtf.getText().toLowerCase().startsWith("ftp://")){
			String filename = filenamejtf.getText();
			if(Path.equals("")){
				Path = MainFrame.node2.lujing;
			}
			m_tablemodel.addDownload(new Download(urljtf.getText(),SetUpDialog.kuaishu,filename,Path));		
			String name = list.getItemAt(list.getSelectedIndex()).toString();
			TreeModel treemodel = (TreeModel) MainFrame.getTreeModel(name);
			m_tablemodel.setTreeModel(treemodel);
			urljtf.setText("");
			dispose();
		}else{
			JOptionPane.showMessageDialog(this,
					"此URL地址无效,请重新输入!!","Error",JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public boolean isExist(String url){
		for(int i=0;i<MainFrame.node2.downloadList.size();i++){
			Download download = (Download)MainFrame.node2.downloadList.get(i);
			if(url.equals(download.url)){
				DownloadsTableModel tablemodel = new DownloadsTableModel(MainFrame.node2);
				MainFrame.table.setModel(tablemodel);
				MainFrame.selectionNode = MainFrame.node2;
				MainFrame.tree.setSelectionRow(2);
				return true;
			}
		}
		for(int i=0;i<MainFrame.leadNodeList.size();i++){
			TreeModel treemodel = (TreeModel)MainFrame.leadNodeList.get(i);
			
			for(int j=0;j<treemodel.downloadList.size();j++){
				Download download = (Download) treemodel.downloadList.get(j);
				System.out.println("taong");
				if(url.equals(download.url)){
					
					DownloadsTableModel 
					tablemodel1 = new DownloadsTableModel(treemodel);
					  MainFrame.table.setModel(tablemodel1);
					  TableColumn column=null;
		    	      for (int h=0;h<6;h++){
		    	         //利用JTable中的getColumnModel()方法取得TableColumnModel对象;再利用TableColumnModel界面所定义的getColumn()方法取
		    	         //TableColumn对象,利用此对象的setPreferredWidth()方法就可以控制字段的宽度.
		    	      	  column=MainFrame.table.getColumnModel().getColumn(h);
		    	      	  if (h==0)
		    	      	     column.setPreferredWidth(20);
		    	      	  else
		    	      	  if(h == 1)
		    	      	     column.setPreferredWidth(120);
		    	      	  else 
		    	      	  if(h==2)
		    	      		  column.setPreferredWidth(60);
		    	      	  else 
		    	      	  if(h == 3)
		    	      		  column.setPreferredWidth(160);
		    	      	  else
		    	      	     column.setPreferredWidth(140);
		    	       }
		    	      MainFrame.selectionNode = treemodel;
		    	      MainFrame.tree.setSelectionRow(i+3);
		    	      return true;
				}
			}
		}
		for(int i=0;i<MainFrame.node3.downloadList.size();i++){
			Download download = (Download) MainFrame.node3.downloadList.get(i);
			DownloadsTableModel 
			tablemodel = new DownloadsTableModel(MainFrame.node3);
			if(url.equals(download.url)){
				MainFrame.table.setModel(tablemodel);
				TableColumn column=null;
	    	      for (int h=0;h<6;h++){
	    	         //利用JTable中的getColumnModel()方法取得TableColumnModel对象;再利用TableColumnModel界面所定义的getColumn()方法取
	    	         //TableColumn对象,利用此对象的setPreferredWidth()方法就可以控制字段的宽度.
	    	      	  column=MainFrame.table.getColumnModel().getColumn(h);
	    	      	  if (h==0)
	    	      	     column.setPreferredWidth(20);
	    	      	  else
	    	      	  if(h == 1)
	    	      	     column.setPreferredWidth(135);
	    	      	  else 
	    	      	  if(h==2)
	    	      		  column.setPreferredWidth(60);
	    	      	  else 
	    	      	  if(h == 3)
	    	      		  column.setPreferredWidth(60);
	    	      	  else
	    	      	     column.setPreferredWidth(150);
	    	       }
				MainFrame.selectionNode = MainFrame.node3;
				MainFrame.tree.setSelectionRow(MainFrame.leadNodeList.size()+3);
				return true;
			}
		}
		return false;
	}
	public void keyTyped(KeyEvent e) {
	
	}
	public void keyPressed(KeyEvent e) {
		
	}
	public void keyReleased(KeyEvent e) {
		if(e.getSource() == urljtf){
		char c = e.getKeyChar();
		if(c == KeyEvent.VK_ENTER){
			addTask();
		}else{
			String fileName;
			fileName = urljtf.getText();
			filename = fileName.substring(fileName.lastIndexOf('/')+1);
			if(filename.equals(""))
				filenamejtf.setText("index.htm");
			else
			filenamejtf.setText(filename);
		}
	}
		else if(e.getSource() == filenamejtf){
			char c = e.getKeyChar();
			if(c == KeyEvent.VK_ENTER){
				addTask();
			}
		}
	}
}

⌨️ 快捷键说明

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