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

📄 jdirchooser.java

📁 OpenSwing开源项目
💻 JAVA
字号:
package com.sunking.swing;

import java.io.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 * <p>Title: OpenSwing</p>
 * <p>Description: JDirChooser 目录选择器</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
 *  && <a href="mailto:zt9788@126.com">zt9788</a>
 * @version 1.0
 */
public class JDirChooser extends JDialog
    implements TreeSelectionListener, ActionListener, Serializable {
  boolean hasCancel = true;

  JPanel pCenter = new JPanel(new BorderLayout());
  JFileTree fileTree = new JFileTree();
  JScrollPane spTree = new JScrollPane(fileTree);
  JPanel pSouth = new JPanel(new BorderLayout());
  JPanel pButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 7, 0));
  JPanel pResult = new JPanel(new BorderLayout());
  JLabel lbFolder = new JLabel(OpenSwingUtil.getOpenResource("Folder"));
  JTextField txtResult = new JTextField();
  JButton bttCreateNew = new JButton(OpenSwingUtil.getOpenResource("CreateNew"));
  JButton bttCancel = new JButton(OpenSwingUtil.getOpenResource("Cancel"));
  JButton bttOK = new JButton(OpenSwingUtil.getOpenResource("OK"));
  JLabel lbView = new JLabel();
  JPanel pAdjust = new JPanel() {
    public void paintChildren(Graphics g) {
      super.paintChildren(g);
      int w = getWidth();
      int h = getHeight();
      Color oldColor = g.getColor();
      // draw ///
      g.setColor(Color.white);
      g.drawLine(w, h - 12, w - 12, h);
      g.drawLine(w, h - 8, w - 8, h);
      g.drawLine(w, h - 4, w - 4, h);
      g.setColor(new Color(128, 128, 128));
      g.drawLine(w, h - 11, w - 11, h);
      g.drawLine(w, h - 10, w - 10, h);
      g.drawLine(w, h - 7, w - 7, h);
      g.drawLine(w, h - 6, w - 6, h);
      g.drawLine(w, h - 3, w - 3, h);
      g.drawLine(w, h - 2, w - 2, h);
      g.setColor(oldColor);
    }
  };

  MouseInputAdapter adjustWindowListener = new MouseInputAdapter() {
    Point oldP = null;
    public void mouseDragged(MouseEvent e) {
      if (oldP != null) {
        Point newP = e.getPoint();
        JDirChooser c = JDirChooser.this;
        c.setBounds(c.getX(), c.getY(), c.getWidth() + (newP.x - oldP.x),
                    c.getHeight() + (newP.y - oldP.y));
        c.validate();
        oldP = newP;
      }
    }

    public void mouseMoved(MouseEvent e) {
      Component c = e.getComponent();
      Rectangle r = new Rectangle(c.getWidth() - 12, 0, 12, c.getHeight());
      if (r.contains(e.getPoint())) {
        JDirChooser.this.setCursor(Cursor.getPredefinedCursor(Cursor.
            SE_RESIZE_CURSOR));
      }
      else {
        JDirChooser.this.setCursor(Cursor.getDefaultCursor());
      }
    }

    public void mousePressed(MouseEvent e) {
      Component c = e.getComponent();
      Rectangle r = new Rectangle(c.getWidth() - 12, 0, 12, c.getHeight());
      if (r.contains(e.getPoint())) {
        oldP = e.getPoint();
      }
      else {
        oldP = null;
      }
    }

    public void mouseExited(MouseEvent e) {
      JDirChooser.this.setCursor(Cursor.getDefaultCursor());
    }

    public void mouseReleased(MouseEvent e) {
      oldP = null;
    }
  };

  public static File showDialog(Component c, String title, boolean modal,
                                File initDir, String msg) {
    JDirChooser dialog;
    Window owner = getRootWindow(c);
    if (owner instanceof Dialog) {
      dialog = new JDirChooser( (Dialog) owner, title, modal);
    }
    else if (owner instanceof Frame) {
      dialog = new JDirChooser( (Frame) owner, title, modal);
    }
    else {
      dialog = new JDirChooser();
      dialog.setTitle(title);
    }
    if (initDir != null) {
      try {
        dialog.setSelectFile(initDir);
      }
      catch (Exception ex) {
      }
    }
    if (msg != null) {
      dialog.setMsg(msg);
    }
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    dialog.setLocation( (d.width - dialog.getSize().width) / 2,
                       (d.height - dialog.getSize().height) / 2);
    dialog.show();
    return dialog.getSelectFile();
  }

  /**
   * 取得根窗口
   * @param c Component
   * @return Window
   */
  static Window getRootWindow(Component c) {
    if (c == null)return null;
    Container parent = c.getParent();
    if (c instanceof Window)
      return (Window) c;
    while (! (parent instanceof Window))
      parent = parent.getParent();
    return (Window) parent;
  }

  public JDirChooser(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public JDirChooser(Dialog frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public JDirChooser() {
    this( (Frame)null, "", false);
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    bttCreateNew.setPreferredSize(new Dimension(88, 21));
    bttCreateNew.setMargin(new Insets(0, 0, 0, 0));
    bttCancel.setPreferredSize(new Dimension(88, 21));
    bttCancel.setMargin(new Insets(0, 0, 0, 0));
    bttOK.setPreferredSize(new Dimension(88, 21));
    pCenter.setBorder(BorderFactory.createEmptyBorder(0, 24, 0, 24));
    lbView.setPreferredSize(new Dimension(190, 50));
    pButtons.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, -7));
    pResult.setBorder(BorderFactory.createEmptyBorder(12, 0, 12, 0));
    pAdjust.setPreferredSize(new Dimension(10, 15));
    this.getContentPane().add(pCenter, BorderLayout.CENTER);
    pCenter.add(spTree, BorderLayout.CENTER);
    pCenter.add(pSouth, BorderLayout.SOUTH);
    pResult.add(txtResult, BorderLayout.CENTER);
    pResult.add(lbFolder, BorderLayout.WEST);
    pSouth.add(pButtons, BorderLayout.CENTER);
    pSouth.add(pResult, BorderLayout.NORTH);
    pButtons.add(bttOK, null);
    pButtons.add(bttCancel, null);
    pButtons.add(bttCreateNew, null);
    pCenter.add(lbView, BorderLayout.NORTH);
    this.getContentPane().add(pAdjust, BorderLayout.SOUTH);
    this.setSize(400, 305);
    this.setResizable(false);
    this.txtResult.setEditable(false);
    this.txtResult.setBackground(Color.white);

    fileTree.addTreeSelectionListener(this);
    getRootPane().registerKeyboardAction(this,
                                         KeyStroke.getKeyStroke(KeyEvent.
        VK_ESCAPE,
        0), JComponent.WHEN_IN_FOCUSED_WINDOW);
    bttOK.setEnabled(false);
    bttCreateNew.setEnabled(false);
    bttOK.addActionListener(this);
    bttCancel.addActionListener(this);
    bttCreateNew.addActionListener(this);

    pAdjust.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
    pAdjust.addMouseListener(adjustWindowListener);
    pAdjust.addMouseMotionListener(adjustWindowListener);
  }

  public void setMsg(String msg) {
    this.lbView.setText(msg);
  }

  public String getMsg() {
    return this.lbView.getText();
  }

  public void valueChanged(TreeSelectionEvent event) {
    File f = fileTree.getSelectFile();
    boolean enabled = (f != null);
    bttOK.setEnabled(enabled);
    enabled = enabled && JFileTree.fileSystemView.isFileSystem(f);
    if (f != null && JFileTree.fileSystemView.isDrive(f)) {
      enabled = enabled && f.canWrite();
    }
    bttCreateNew.setEnabled(enabled);
    if (f != null) {
      txtResult.setText(JFileTree.fileSystemView.getSystemDisplayName(f));
      //fileTree.setEditable(f.renameTo(f));
    }
  }

  public JFileTree getFileTree() {
    return this.fileTree;
  }

  public void setFileTree(JFileTree tree) {
    if (tree == null || tree == this.fileTree) {
      return;
    }
    this.spTree.getViewport().setView(tree);
    this.spTree.doLayout();
  }

  public File getSelectFile() {
    if (hasCancel)
      return null;
    return fileTree.getSelectFile();
  }

  public void setSelectFile(File f) throws Exception {
    fileTree.setSelectFile(f);
  }

  public void actionPerformed(ActionEvent actionEvent) {
    Object obj = actionEvent.getSource();
    if (obj == bttCreateNew) {
      String dirName = JOptionPane.showInputDialog(this, "", "new");
      if (dirName == null || dirName.trim().length() == 0) {
        return;
      }
      File f = fileTree.getSelectFile();
      f = new File(f.getAbsolutePath() + File.separator + dirName);
      if (f.mkdir()) {
        fileTree.getSelectFileNode().removeAllChildren();
        fileTree.getSelectFileNode().setExplored(false);
        fileTree.getSelectFileNode().explore();
      }
      else {
        JOptionPane.showMessageDialog(this, "Error", "Error",
                                      JOptionPane.ERROR_MESSAGE);
      }
    }
    else {
      if (obj == bttOK) {
        hasCancel = false;
      }
      this.setVisible(false);
    }
  }

  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (Exception e) {
    }
    JTextArea txt = new JTextArea("JDirChooser Demo");

    JFrame frame = new JFrame();
//      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("JDirChooser Demo");
    frame.getContentPane().add(new JScrollPane(txt), BorderLayout.CENTER);
    frame.setSize(400, 320);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation( (d.width - frame.getSize().width) / 2,
                      (d.height - frame.getSize().height) / 2);
    frame.setVisible(true);
    File f = JDirChooser.showDialog(frame, "Please Select directory", true, null,
                                    "Please Select");
    if (f != null) {
      txt.setText(f.getAbsolutePath());
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -