package jdepend.client.ui.start; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.ToolTipManager; import jdepend.framework.context.JDependContext; import jdepend.framework.ui.dialog.WelcomeDialog; import jdepend.framework.util.BundleUtil; import jdepend.framework.util.StringUtil; import jdepend.client.ui.JDependCooper; import jdepend.client.ui.framework.UIPropertyConfigurator; public class WorkspaceSettingDialog extends JDialog { private JTextField workspacePath; private WorkspaceSetting setting; private WelcomeDialog welcomeDialog; private String[] args; private JDependCooper frame; public WorkspaceSettingDialog(WorkspaceSetting setting, JDependCooper frame) { this(frame, null, setting, null); } public WorkspaceSettingDialog(JDependCooper frame, final WelcomeDialog welcomeDialog1, WorkspaceSetting setting, String[] args) { setTitle("设置工作区路径"); this.setting = setting; this.welcomeDialog = welcomeDialog1; this.args = args; this.frame = frame; getContentPane().setLayout(new BorderLayout()); setSize(580, 115); this.setLocationRelativeTo(null);// 窗口在屏幕中间显示 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (welcomeDialog != null) { welcomeDialog.dispose(); System.exit(0); } } }); this.add(BorderLayout.WEST, new JLabel("工作区路径:")); workspacePath = new JTextField() { @Override public String getToolTipText(MouseEvent e) { return "在选择的路径下会创建\\cooper\\workspace文件夹"; } }; ToolTipManager.sharedInstance().registerComponent(workspacePath); if (setting.getWorkspacePath() != null) { workspacePath.setText(setting.getWorkspacePath()); } workspacePath.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { interWorkspace(e.getComponent()); } } }); JPanel pathPanel = new JPanel(new BorderLayout()); pathPanel.add(BorderLayout.CENTER, workspacePath); pathPanel.add(BorderLayout.EAST, this.selectDirButton()); this.add(BorderLayout.CENTER, pathPanel); JPanel buttonBar = new JPanel(new FlowLayout()); buttonBar.add(createOkButton()); buttonBar.add(createCancelButton()); this.add(BorderLayout.SOUTH, buttonBar); } private JButton selectDirButton() { JButton b = new JButton("选择") { @Override public String getToolTipText(MouseEvent e) { return "在选择的路径下会创建\\cooper\\workspace文件夹"; } }; ToolTipManager.sharedInstance().registerComponent(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String defaultDir = null; if (workspacePath.getText() == null || workspacePath.getText().length() == 0) { defaultDir = System.getProperty("user.home"); } else { int pos = StringUtil.lastIndexOf(workspacePath.getText(), "\\", 3); if (pos != -1) { defaultDir = workspacePath.getText().substring(0, pos); } else { defaultDir = System.getProperty("user.home"); } } JFileChooser jFileChooser = new JFileChooser(defaultDir); jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int result = jFileChooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { File f = jFileChooser.getSelectedFile(); if (f.getAbsolutePath().endsWith("\\cooper\\workspace")) { workspacePath.setText(f.getAbsolutePath()); } else { workspacePath.setText(f.getAbsolutePath() + "\\cooper\\workspace"); } } } }); return b; } private Component createOkButton() { JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_OK)); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { interWorkspace((Component) e.getSource()); } }); return button; } private Component createCancelButton() { JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_Cancel)); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (welcomeDialog != null) { welcomeDialog.dispose(); WorkspaceSettingDialog.this.dispose(); System.exit(0); } else { WorkspaceSettingDialog.this.dispose(); } } }); return button; } private void interWorkspace(Component component) { if (workspacePath.getText() == null || workspacePath.getText().length() == 0) { JOptionPane.showMessageDialog(component, "请录入工作区路径", "alert", JOptionPane.ERROR_MESSAGE); return; } try { if (setting.getWorkspacePath() == null || !setting.getWorkspacePath().equals(workspacePath.getText())) { setting.initWorkspace(workspacePath.getText()); setting.save(); } if (welcomeDialog != null) {// 客户端启动时 frame.start(args, setting); welcomeDialog.dispose(); } else {// 切换工作区时 // 保存原UI信息 UIPropertyConfigurator.getInstance().save(); // 设置workspacePath JDependContext.setWorkspacePath(setting.getWorkspacePath()); // 刷新frame frame.refresh(); } WorkspaceSettingDialog.this.dispose(); } catch (Exception e1) { e1.printStackTrace(); JOptionPane.showMessageDialog(null, "设置工作区失败", "alert", JOptionPane.ERROR_MESSAGE); } } }