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

📄 q2datadialog.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			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 + -