📄 downloadmanager.java
字号:
jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addDownloadButtonActionPerformed(evt); } }); editMenuItem1.add(jMenuItem1); jMenuBar2.add(editMenuItem1); controlMenuItem.setText("Control"); controlMenuItem.setName("controlMenuItem"); // NOI18N startMenuItem.setText("Start"); startMenuItem.setName("startMenuItem"); // NOI18N startMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { startMenuItemActionPerformed(evt); } }); controlMenuItem.add(startMenuItem); pauseMenuItem.setText("Pause"); pauseMenuItem.setName("pauseMenuItem"); // NOI18N pauseMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pauseButtonActionPerformed(evt); } }); controlMenuItem.add(pauseMenuItem); resumeMenuItem.setText("Resume"); resumeMenuItem.setName("resumeMenuItem"); // NOI18N resumeMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { resumeButtonActionPerformed(evt); } }); controlMenuItem.add(resumeMenuItem); stopMenuItem.setText("Stop"); stopMenuItem.setName("stopMenuItem"); // NOI18N stopMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); controlMenuItem.add(stopMenuItem); jMenuBar2.add(controlMenuItem); helpMenuItem.setText("Help"); helpMenuItem.setName("helpMenuItem"); // NOI18N aboutMenuItem.setText("About"); aboutMenuItem.setName("aboutMenuItem"); // NOI18N helpMenuItem.add(aboutMenuItem); jMenuBar2.add(helpMenuItem); setJMenuBar(jMenuBar2); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(60, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-800)/2, (screenSize.height-640)/2, 800, 640); }// </editor-fold>//GEN-END:initComponents /** This method is called when system initiate. ** It is used to initiate settings of Downloads table. */ private void setDownloadsTableModel() { //Setup download table jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { tableSelectionChanged(); } }); // Allow only one row at a time to be selected. jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // Set up ProgressBar as renderer for progress column. ProgressRenderer renderer = new ProgressRenderer(0, 100); renderer.setStringPainted(true); // show progress text jTable1.setDefaultRenderer(JProgressBar.class, renderer); // Set table's row height large enough to fit JProgressBar. jTable1.setRowHeight((int) renderer.getPreferredSize().getHeight()); } private void addDownloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addDownloadButtonActionPerformed String urlString = txtURL.getText(); String rename = txtRenameAs.getText().trim().toString(); actionAdd(urlString, Integer.parseInt(threadsSpinner.getValue().toString()), this.txtSaveTo.getText() + "\\", rename); //follows are temped set pauseButton.setEnabled(false); resumeButton.setEnabled(false); cancelButton.setEnabled(false); this.removeDownloadButton.setEnabled(false); this.startButton.setEnabled(false); // end temped set. }//GEN-LAST:event_addDownloadButtonActionPerformed private void fileExitMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileExitMenuItem1ActionPerformed System.exit(0); }//GEN-LAST:event_fileExitMenuItem1ActionPerformed private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed // TODO add your handling code here: FolderSelected folderSelected = new FolderSelected(DownloadManager.this); txtSaveTo.setText(folderSelected.getFolderPath()); }//GEN-LAST:event_browseButtonActionPerformed private void removeDownloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeDownloadButtonActionPerformed // TODO add your handling code here: clearing = true; tableModel.clearDownload(table.getSelectedRow()); clearing = false; selectedDownload = null; updateButtons(); }//GEN-LAST:event_removeDownloadButtonActionPerformed private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pauseButtonActionPerformed // TODO add your handling code here: selectedDownload.pause(); updateButtons(); }//GEN-LAST:event_pauseButtonActionPerformed private void resumeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resumeButtonActionPerformed // TODO add your handling code here: selectedDownload.resume(); updateButtons(); }//GEN-LAST:event_resumeButtonActionPerformed private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed // TODO add your handling code here: selectedDownload.cancel(); updateButtons(); }//GEN-LAST:event_cancelButtonActionPerformed private void startMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startMenuItemActionPerformed // TODO add your handling code here: }//GEN-LAST:event_startMenuItemActionPerformed private void menuItemCodeManagerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemCodeManagerActionPerformed // TODO add your handling code here: new CodeManager().setVisible(true); this.dispose();}//GEN-LAST:event_menuItemCodeManagerActionPerformed private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startButtonActionPerformed // TODO add your handling code here: }//GEN-LAST:event_startButtonActionPerformed /** this method is called when adding a new download. @param urlString full URL path @param threadNumber number of threads set to one download job @param localFileAddress local path which is saved @param filename downloading file name */ private void actionAdd(String urlString, int threadNumber, String localFileAddress, String filename) { try { URL verifyUrl = new URL(urlString); if (verifyUrl != null) { tableModel.addDownload(new Download(verifyUrl, threadNumber, localFileAddress, filename)); } else { JOptionPane.showMessageDialog(this, "Invalid Download URL", "Error", JOptionPane.ERROR_MESSAGE); } } catch (MalformedURLException malURLe) { System.err.println(malURLe); } } /** this method is called when table row selection changes. */ private void tableSelectionChanged() { /* Unregister from receiving notifications from the last selected download. */ if (selectedDownload != null) { selectedDownload.deleteObserver(DownloadManager.this); } /* If not in the middle of clearing a download, set the selected download and register to receive notifications from it. */ if (!removing) { selectedDownload = tableModel.getDownload(table.getSelectedRow()); selectedDownload.addObserver(DownloadManager.this); updateButtons(); } } /** Update each button's state based off of the currently selected download's status. */ private void updateButtons() { if (selectedDownload != null) { int status = selectedDownload.getStatus(); switch (status) { case Download.DOWNLOADING: pauseButton.setEnabled(true); resumeButton.setEnabled(false); cancelButton.setEnabled(true); //clearButton.setEnabled(false); break; case Download.PAUSED: pauseButton.setEnabled(false); resumeButton.setEnabled(true); cancelButton.setEnabled(true); //clearButton.setEnabled(false); break; case Download.ERROR: pauseButton.setEnabled(false); resumeButton.setEnabled(true); cancelButton.setEnabled(false); // clearButton.setEnabled(true); break; default: // COMPLETE or CANCELLED pauseButton.setEnabled(false); resumeButton.setEnabled(false); cancelButton.setEnabled(false); //clearButton.setEnabled(true); } } else { // No download is selected in table. pauseButton.setEnabled(false); resumeButton.setEnabled(false); cancelButton.setEnabled(false); //clearButton.setEnabled(false); } } /** Update is called when a Download notifies its observers of any changes. @param o observed object which implement the Observalbe @param arg */ public void update(Observable o, Object arg) { //Update buttons if the selected download has changed. if (selectedDownload != null && selectedDownload.equals(o)) { updateButtons(); } } /** @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new DownloadManager().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem aboutMenuItem; private javax.swing.JButton addDownloadButton; private javax.swing.JButton browseButton; private javax.swing.JButton cancelButton; private javax.swing.JPanel controlButtonPanel; private javax.swing.JMenu controlMenuItem; private javax.swing.JPanel downloadsPanel; private javax.swing.JMenu editMenuItem1; private javax.swing.JMenuItem fileExitMenuItem1; private javax.swing.JMenu fileMenuItem1; private javax.swing.JMenu helpMenuItem; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel5; private javax.swing.JMenuBar jMenuBar2; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator2; private javax.swing.JTable jTable1; private javax.swing.JMenuItem menuItemCodeManager; private javax.swing.JButton pauseButton; private javax.swing.JMenuItem pauseMenuItem; private javax.swing.JButton removeDownloadButton; private javax.swing.JButton resumeButton; private javax.swing.JMenuItem resumeMenuItem; private javax.swing.JButton showDetailsButton; private javax.swing.JButton startButton; private javax.swing.JMenuItem startMenuItem; private javax.swing.JMenuItem stopMenuItem; private javax.swing.JSpinner threadsSpinner; private javax.swing.JTextField txtRenameAs; private javax.swing.JTextField txtSaveTo; public javax.swing.JTextField txtURL; // End of variables declaration//GEN-END:variables // Variables Declaration private DownloadsTableModel tableModel; // Download table's data model. private JTable table; // Table listing downloads. private Download selectedDownload; // Currently selected download. private boolean removing; // Flag for whether or not table // Flag for whether or not table selection is being cleared. private boolean clearing; //selection is being cleared. // End of variables declaration }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -