📄 downloadgui.java
字号:
/*DownloadGUI.java*/
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class DownloadGUI implements ActionListener,MouseListener,
PopupMenuListener,WindowListener,ChangeListener
{
//定义私有成员对象
private JFrame mainFrame=null;
private JButton closeButton=null;
private JButton addButton=null;
private JButton deleteButton=null;
private JButton startButton=null;
private JButton stopButton=null;
private JTable dataTable=null;
private DownloadSetting setting=null;
private UserModel defaultModel=null;
private JMenuBar myMenuBar=null;
private JMenu fileMenu=null;
private JMenu viewMenu=null;
private JMenu helpMenu=null;
private JMenu styleMenu=null;
private JMenuItem addMenuItem=null;
private JMenuItem deleteMenuItem=null;
private JMenuItem startMenuItem=null;
private JMenuItem stopMenuItem=null;
private JMenuItem selectallMenuItem=null;
private JMenuItem deselectallMenuItem=null;
private JMenuItem exitMenuItem=null;
private JMenuItem javaMenuItem=null;
private JMenuItem windowMenuItem=null;
private JMenuItem macintoshMenuItem=null;
private JMenuItem aboutMenuItem=null;
private JMenuItem contentMenuItem=null;
private JPopupMenu popup=null;
private JProgressBar progressbar=null;
private javax.swing.Timer timer=null;
private Vector filedownVector=null;
//构造函数
public DownloadGUI()
{
mainFrame=new JFrame("无限下载"); //程序主框架
setting=new DownloadSetting(mainFrame); //添加新任务时的窗口
Container pan=mainFrame.getContentPane(); //获得主框架的内部容器
pan.setLayout(null);//屏蔽默认的版面管理器,采用自行调整的版面方案
//建立程序中主菜单"文件"下的菜单项
addMenuItem=new JMenuItem("添加(A)");
addMenuItem.setMnemonic('A');
addMenuItem.setAccelerator(KeyStroke.getKeyStroke('A',
java.awt.Event.CTRL_MASK,true));
addMenuItem.addActionListener(this);
deleteMenuItem=new JMenuItem("删除(D)");
deleteMenuItem.setMnemonic('D');
deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke('D',
java.awt.Event.CTRL_MASK,true));
deleteMenuItem.addActionListener(this);
startMenuItem=new JMenuItem("启动(S)");
startMenuItem.setMnemonic('S');
startMenuItem.setAccelerator(KeyStroke.getKeyStroke('S',
java.awt.Event.CTRL_MASK,true));
startMenuItem.addActionListener(this);
stopMenuItem=new JMenuItem("停止(T)");
stopMenuItem.setMnemonic('T');
stopMenuItem.setAccelerator(KeyStroke.getKeyStroke('T',
java.awt.Event.CTRL_MASK,false));
stopMenuItem.addActionListener(this);
exitMenuItem=new JMenuItem("退出(X)");
exitMenuItem.setMnemonic('X');
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke('X',
java.awt.Event.CTRL_MASK,true));
exitMenuItem.addActionListener(this);
selectallMenuItem=new JMenuItem("全部选中");
selectallMenuItem.addActionListener(this);
deselectallMenuItem=new JMenuItem("全部取消");
deselectallMenuItem.addActionListener(this);
fileMenu=new JMenu("文件(F)");
fileMenu.setMnemonic('F');
fileMenu.add(addMenuItem);
fileMenu.add(deleteMenuItem);
fileMenu.add(startMenuItem);
fileMenu.add(stopMenuItem);
fileMenu.addSeparator();
fileMenu.add(selectallMenuItem);
fileMenu.add(deselectallMenuItem);
fileMenu.addSeparator();
fileMenu.add(exitMenuItem);
//建立程序中主菜单"显示"下的菜单项
javaMenuItem=new JMenuItem("Java模式 ");
javaMenuItem.setMnemonic('J');
javaMenuItem.setAccelerator(KeyStroke.getKeyStroke('J',
java.awt.Event.CTRL_MASK,true));
javaMenuItem.addActionListener(this);
windowMenuItem=new JMenuItem("Window模式");
windowMenuItem.setMnemonic('W');
windowMenuItem.setAccelerator(KeyStroke.getKeyStroke('W',
java.awt.Event.CTRL_MASK,true));
windowMenuItem.addActionListener(this);
macintoshMenuItem=new JMenuItem("Macintosh模式");
macintoshMenuItem.setMnemonic('M');
macintoshMenuItem.setAccelerator(KeyStroke.getKeyStroke('M',
java.awt.Event.CTRL_MASK,true));
macintoshMenuItem.addActionListener(this);
styleMenu=new JMenu("模式(S)");
styleMenu.setMnemonic('S');
styleMenu.add(javaMenuItem);
styleMenu.add(windowMenuItem);
styleMenu.add(macintoshMenuItem);
viewMenu=new JMenu("显示(V)");
viewMenu.setMnemonic('V');
viewMenu.add(styleMenu);
//建立程序中主菜单帮助"下的菜单项
contentMenuItem=new JMenuItem("帮助主题");
contentMenuItem.addActionListener(this);
aboutMenuItem=new JMenuItem("关于...");
aboutMenuItem.addActionListener(this);
helpMenu=new JMenu("帮助(H)");
helpMenu.setMnemonic('H');
helpMenu.add(contentMenuItem);
helpMenu.add(aboutMenuItem);
//将菜单条添加到主框架窗口上
myMenuBar=new JMenuBar();
myMenuBar.setOpaque(true);
myMenuBar.add(fileMenu);
myMenuBar.add(viewMenu);
myMenuBar.add(helpMenu);
mainFrame.setJMenuBar(myMenuBar);
//建立弹出式菜单
popup=new JPopupMenu();
popup.addPopupMenuListener(this);
popup.setBorder(new BevelBorder(BevelBorder.RAISED));
//建立表格
Vector headVector=new Vector(6);
headVector.addElement("状态");
headVector.addElement("网络路径");
headVector.addElement("文件保存");
headVector.addElement("文件大小");
headVector.addElement("优先权");
headVector.addElement("分片数");
Vector rowVector=getData(); //从用户数据文件中取得下载任务
defaultModel=new UserModel(rowVector,headVector);
dataTable=new JTable(defaultModel);
dataTable.getColumnModel().getColumn(0).setPreferredWidth(50);
dataTable.getColumnModel().getColumn(1).setPreferredWidth(200);
dataTable.getColumnModel().getColumn(2).setPreferredWidth(150);
dataTable.getColumnModel().getColumn(3).setPreferredWidth(100);
dataTable.getColumnModel().getColumn(4).setPreferredWidth(50);
dataTable.getColumnModel().getColumn(5).setPreferredWidth(50);
dataTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
dataTable.setRowSelectionAllowed(true);
if (dataTable.getRowCount()>0)
dataTable.setRowSelectionInterval(0,0);//默认选中第一行
dataTable.add(popup);
dataTable.addMouseListener(this);
JScrollPane scroll=new JScrollPane(dataTable);
//根据表格中的数据建立下载文件的线程
filedownVector=new Vector();
try
{
for(int i=0;i<rowVector.size();i++)
{
FileDown tempFileDown;
tempFileDown=new FileDown((Vector)rowVector.elementAt(i));
tempFileDown.start();
dataTable.setValueAt(tempFileDown.getStatus(),i,0);
long tempLong=tempFileDown.getFileLength();
dataTable.setValueAt(String.valueOf(tempLong),i,3);
filedownVector.addElement(tempFileDown);
}
}
catch (IOException e){ e.printStackTrace(); }
rowVector=null;
headVector=null;
//建立命令按钮
closeButton=new JButton("关闭(C)");
closeButton.addActionListener(this);
closeButton.setMnemonic('C');
addButton=new JButton("添加(A)");
addButton.addActionListener(this);
addButton.setMnemonic('A');
deleteButton=new JButton("删除(D)");
deleteButton.addActionListener(this);
deleteButton.setMnemonic('D');
startButton=new JButton("启动(S)");
startButton.addActionListener(this);
startButton.setMnemonic('S');
stopButton=new JButton("停止(T)");
stopButton.addActionListener(this);
stopButton.setMnemonic('T');
//建立进度条和时间控件
progressbar = new JProgressBar();
progressbar.setOrientation(JProgressBar.HORIZONTAL);
progressbar.setMinimum(0);
progressbar.setMaximum(100);
progressbar.setValue(0);
progressbar.setStringPainted(true);
progressbar.setBorderPainted(false);
progressbar.setBorder(new BevelBorder(BevelBorder.LOWERED));
progressbar.addChangeListener(this);
timer = new javax.swing.Timer(100,this);
timer.start();
//将各种成员对象添加到主框架窗口的版面管理器中
pan.add(closeButton);
pan.add(addButton);
pan.add(deleteButton);
pan.add(startButton);
pan.add(stopButton);
pan.add(scroll);
pan.add(progressbar);
//设置各个成员对象的边界位置和外观大小
closeButton.setBounds(610,5,80,30);
addButton.setBounds(610,65,80,30);
deleteButton.setBounds(610,100,80,30);
startButton.setBounds(610,135,80,30);
stopButton.setBounds(610,170,80,30);
progressbar.setBounds(5,210,600,40);
scroll.setBounds(3,5,603,200);
mainFrame.pack();
mainFrame.setBounds(50,50,700,300);
mainFrame.setForeground(Color.darkGray);
mainFrame.setResizable(false);
mainFrame.setVisible(true);
mainFrame.addWindowListener(this);
}//结束构造函数DownloadGUI()
/*以下部分是对各个接口的实现*/
//实现 ActionListener接口(针对菜单项和命令按钮)
public void actionPerformed(ActionEvent e)
{
if((e.getSource()==addButton) || (e.getSource()==addMenuItem))
addFunc();
if((e.getSource()==deleteButton)||(e.getSource()==deleteMenuItem))
deleteFunc();
if((e.getSource()==startButton) || (e.getSource()==startMenuItem))
startFunc();
if((e.getSource()==stopButton) || (e.getSource()==stopMenuItem))
stopFunc();
if((e.getSource()==closeButton) || (e.getSource()==exitMenuItem))
closeFunc();
if(e.getSource()==selectallMenuItem)
selectallFunc();
if(e.getSource()==deselectallMenuItem)
deselectallFunc();
if(e.getSource()==javaMenuItem)
javaFunc();
if(e.getSource()==windowMenuItem)
windowFunc();
if(e.getSource()==macintoshMenuItem)
macintoshFunc();
if(e.getSource()==contentMenuItem)
contentFunc();
if(e.getSource()==aboutMenuItem)
aboutFunc();
if (e.getSource()==timer)
{
int row=dataTable.getSelectedRow();
if (row>-1)
{
int x=((FileDown)(filedownVector.elementAt(row))).getProgress();
progressbar.setValue(x);
}
else { progressbar.setValue(0);}
}
}//结束接口函数actionPerformed()
//实现 MouseListener接口(针对表格)
public void mousePressed(MouseEvent me){ checkPopup(me);}
public void mouseReleased(MouseEvent me){ checkPopup(me);}
public void mouseEntered(MouseEvent me){}
public void mouseExited(MouseEvent me){}
public void mouseClicked(MouseEvent e)
{
checkPopup(e); //判断是否需要显示弹出式菜单
if(e.getClickCount()==2) //当双击鼠标时显示选中的任务详细信息
{
int row=dataTable.getSelectedRow();
if (row>=0)
{
Vector temp=new Vector();
temp.addElement(defaultModel.getValueAt(row,1).toString());
temp.addElement(defaultModel.getValueAt(row,2).toString());
temp.addElement(defaultModel.getValueAt(row,4).toString());
temp.addElement(defaultModel.getValueAt(row,5).toString());
setting.setMode(2,temp);
}
}
}//结束接口函数mouseClicked()
//实现 PopupMenuListener接口(针对表格)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -