📄 q2datadialog.java
字号:
constraints.weighty = 1; constraints.insets = new Insets(5, 5, 5, 5); constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.SOUTHWEST; exit = new JButton("Exit"); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); }}); add(exit, constraints); constraints.gridx = 2; constraints.gridy = 3; constraints.gridwidth = 1; constraints.anchor = GridBagConstraints.SOUTHEAST; ok = new JButton("OK"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ok(); }}); add(ok, constraints); } private void ok() { if (dir.isSelected()) { parent.showChooseDialog(); } else { parent.showInstallPanel(); } } } static class InstallPanel extends JPanel { private Vector mirrorNames = new Vector(); private Vector mirrorLinks = new Vector(); private Q2DataDialog parent; private JComboBox mirrorBox; private JTextField destDir; private JButton cancel; private JButton exit; private JButton install; private JButton choose; public InstallPanel(Q2DataDialog d) { initComponents(); String dir = Q2DataDialog.home + Q2DataDialog.sep + "Jake2"; destDir.setText(dir); initMirrors(); parent = d; } private void initComponents() { GridBagConstraints constraints = new GridBagConstraints(); setLayout(new GridBagLayout()); Dimension d = new Dimension(400, 100); setMinimumSize(d); setMaximumSize(d); setPreferredSize(d); constraints.gridx = 0; constraints.gridy = 0; constraints.insets = new Insets(5, 5, 0, 5); constraints.anchor = GridBagConstraints.SOUTHWEST; add(new JLabel("download mirror"), constraints); constraints.gridx = 0; constraints.gridy = 1; constraints.insets = new Insets(5, 5, 5, 5); add(new JLabel("destination directory"), constraints); constraints.gridx = 1; constraints.gridy = 0; constraints.weightx = 1; constraints.gridwidth = 3; constraints.insets = new Insets(5, 5, 0, 5); constraints.fill = GridBagConstraints.HORIZONTAL; mirrorBox = new JComboBox(); add(mirrorBox, constraints); constraints.gridx = 1; constraints.gridy = 1; constraints.gridwidth = 2; constraints.fill = GridBagConstraints.BOTH; constraints.insets = new Insets(5, 5, 5, 5); destDir = new JTextField(); add(destDir, constraints); constraints.gridx = 3; constraints.gridy = 1; constraints.weightx = 0; constraints.gridwidth = 1; constraints.fill = GridBagConstraints.NONE; choose = new JButton("..."); choose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { choose(); }}); add(choose, constraints); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 1; constraints.weighty = 1; constraints.fill = GridBagConstraints.NONE; exit = new JButton("Exit"); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { exit(); }}); add(exit, constraints); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 4; constraints.anchor = GridBagConstraints.SOUTH; cancel = new JButton("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancel(); }}); add(cancel, constraints); constraints.gridx = 2; constraints.gridy = 2; constraints.gridwidth = 2; constraints.anchor = GridBagConstraints.SOUTHEAST; install = new JButton("Install"); install.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { install(); }}); add(install, constraints); } private void readMirrors() { InputStream in = getClass().getResourceAsStream("/mirrors"); BufferedReader r = new BufferedReader(new InputStreamReader(in)); try { int i = 0; while (true) { String name = r.readLine(); String value = r.readLine(); if (name == null || value == null) break; mirrorNames.add(name); mirrorLinks.add(value); } } catch (Exception e) {} finally { try { r.close(); } catch (Exception e1) {} try { in.close(); } catch (Exception e1) {} } } private void initMirrors() { readMirrors(); for (int i = 0; i < mirrorNames.size(); i++) { mirrorBox.addItem(mirrorNames.get(i)); } int i = Globals.rnd.nextInt(mirrorNames.size()); mirrorBox.setSelectedIndex(i); } private void cancel() { parent.showNotFoundPanel(); } private void install() { parent.progressPanel.destDir = destDir.getText(); parent.progressPanel.mirror = (String)mirrorLinks.get(mirrorBox.getSelectedIndex()); parent.showProgressPanel(); new Thread(parent.progressPanel).start(); } private void exit() { System.exit(0); } private void choose() { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setDialogType(JFileChooser.CUSTOM_DIALOG); chooser.setMultiSelectionEnabled(false); chooser.setDialogTitle("choose destination directory"); chooser.showDialog(this, "OK"); String dir = null; try { dir = chooser.getSelectedFile().getCanonicalPath(); } catch (Exception e) {} if (dir != null) destDir.setText(dir); } } static class ProgressPanel extends JPanel implements Runnable { static byte[] buf = new byte[8192]; String destDir; String mirror; JProgressBar progress = new JProgressBar(); JLabel label = new JLabel(""); JButton cancel = new JButton("Cancel"); Q2DataDialog parent; boolean running; public ProgressPanel(Q2DataDialog d) { initComponents(); parent = d; } void initComponents() { progress.setMinimum(0); progress.setMaximum(100); progress.setStringPainted(true); setLayout(new GridBagLayout()); GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(5, 10, 5, 10); gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = GridBagConstraints.SOUTH; add(label, gridBagConstraints); gridBagConstraints.gridy = 1; gridBagConstraints.anchor = GridBagConstraints.NORTH; add(progress, gridBagConstraints); gridBagConstraints.gridy = 1; gridBagConstraints.anchor = GridBagConstraints.SOUTH; gridBagConstraints.fill = GridBagConstraints.NONE; gridBagConstraints.weighty = 1; gridBagConstraints.weightx = 0; cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancel(); }}); add(cancel, gridBagConstraints); Dimension d = new Dimension(400, 100); setMinimumSize(d); setMaximumSize(d); setPreferredSize(d); } void cancel() { synchronized(this) { running = false; } } public void run() { synchronized(this) { running = true; } InputStream in = null; OutputStream out = null; File outFile = null; label.setText("downloading..."); File dir = null; try { dir = new File(destDir); dir.mkdirs(); } catch (Exception e) {} try { if (!dir.isDirectory() || !dir.canWrite()) { endInstall("can't write to " + destDir); return; } } catch (Exception e) { endInstall(e.getMessage()); return; } try { URL url = new URL(mirror); URLConnection conn = url.openConnection(); int length = conn.getContentLength(); progress.setMaximum(length / 1024); progress.setMinimum(0); in = conn.getInputStream(); outFile = File.createTempFile("Jake2Data", ".zip"); outFile.deleteOnExit(); out = new FileOutputStream(outFile); copyStream(in, out); } catch (Exception e) { endInstall(e.getMessage()); return; } finally { try { in.close(); } catch (Exception e) {} try { out.close(); } catch (Exception e) {} } try { installData(outFile.getCanonicalPath()); } catch (Exception e) { endInstall(e.getMessage()); return; } try { if (outFile != null) outFile.delete(); } catch (Exception e) {} endInstall("installation successful"); } void installData(String filename) throws Exception { InputStream in = null; OutputStream out = null; try { ZipFile f = new ZipFile(filename); Enumeration e = f.entries(); while (e.hasMoreElements()) { ZipEntry entry = (ZipEntry)e.nextElement(); String name = entry.getName(); int i; if ((i = name.indexOf("/baseq2")) > -1 && name.indexOf(".dll") == -1) { name = destDir + name.substring(i); File outFile = new File(name); if (entry.isDirectory()) { outFile.mkdirs(); } else { label.setText("installing " + outFile.getName()); progress.setMaximum((int)entry.getSize()/1024); progress.setValue(0); outFile.getParentFile().mkdirs(); out = new FileOutputStream(outFile); in = f.getInputStream(entry); copyStream(in, out); } } } } catch (Exception e) { throw e; } finally { try {in.close();} catch (Exception e1) {} try {out.close();} catch (Exception e1) {} } } void endInstall(String message) { parent.notFoundPanel.message.setText(message); parent.jTextField1.setText(destDir + "/baseq2"); parent.showChooseDialog(); parent.okButtonActionPerformed(null); } void copyStream(InputStream in, OutputStream out) throws Exception { try { int c = 0; int l; while ((l = in.read(buf)) > 0) { if (!running) throw new Exception("installation canceled"); out.write(buf, 0, l); c += l; int k = c / 1024; progress.setValue(k); progress.setString(k + "/" + progress.getMaximum() + " KB"); } } catch (Exception e) { throw e; } finally { try { in.close(); } catch (Exception e) {} try { out.close(); } catch (Exception e) {} } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -