亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? windowsdirectorychooserui.java

?? java swing控件
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**
 * L2FProd.com Common Components 6.9.1 License.
 *
 * Copyright 2005-2006 L2FProd.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.l2fprod.common.swing.plaf.windows;

import com.l2fprod.common.swing.JDirectoryChooser;
import com.l2fprod.common.swing.LookAndFeelTweaks;
import com.l2fprod.common.swing.plaf.DirectoryChooserUI;
import com.l2fprod.common.swing.tree.LazyMutableTreeNode;
import com.l2fprod.common.util.OS;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Stack;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.filechooser.FileView;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicFileChooserUI;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

/**
 * WindowsDirectoryChooserUI. <br>
 *  
 */
public class WindowsDirectoryChooserUI extends BasicFileChooserUI implements
  DirectoryChooserUI {

  public static ComponentUI createUI(JComponent c) {
    return new WindowsDirectoryChooserUI((JFileChooser)c);
  }
  
  private static Queue nodeQueue;

  private JFileChooser chooser;
  private JTree tree;
  private JScrollPane treeScroll;
  private JButton approveButton;
  private JButton cancelButton;
  private JPanel buttonPanel;
  private BasicFileView fileView = new WindowsFileView();
  private Action approveSelectionAction = new ApproveSelectionAction();
  private boolean useNodeQueue;

  private JButton newFolderButton;
  private Action newFolderAction = new NewFolderAction();
  private String newFolderText = null;
  private String newFolderToolTipText = null;

  public WindowsDirectoryChooserUI(JFileChooser chooser) {
    super(chooser);
  }

  public void rescanCurrentDirectory(JFileChooser fc) {
    super.rescanCurrentDirectory(fc);
    findFile(chooser.getSelectedFile() == null?chooser.getCurrentDirectory()
      :chooser.getSelectedFile(), true, true);
  }

  public void ensureFileIsVisible(JFileChooser fc, File f) {
    super.ensureFileIsVisible(fc, f);
    findFile(f, false, false);
  }

  protected String getToolTipText(MouseEvent event) {
    TreePath path = tree.getPathForLocation(event.getX(), event.getY());
    if (path != null && path.getLastPathComponent() instanceof FileTreeNode) {
      FileTreeNode node = (FileTreeNode)path.getLastPathComponent();
      String typeDescription = getFileView(chooser).getTypeDescription(
        node.getFile());
      if (typeDescription == null || typeDescription.length() == 0) {
        return node.toString();
      } else {
        return node.toString() + " - " + typeDescription;
      }
    } else {
      return null;
    }
  }

  public void installComponents(JFileChooser chooser) {
    this.chooser = chooser;

    chooser.setLayout(LookAndFeelTweaks.createBorderLayout());
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

    Component accessory = chooser.getAccessory();
    if (accessory != null) {
      chooser.add("North", chooser.getAccessory());
    }

    tree = new JTree() {

      public String getToolTipText(MouseEvent event) {
        String tip = WindowsDirectoryChooserUI.this.getToolTipText(event);
        if (tip == null) {
          return super.getToolTipText(event);
        } else {
          return tip;
        }
      }
    };
    tree.addTreeExpansionListener(new TreeExpansion());

    tree.setModel(new FileSystemTreeModel(chooser.getFileSystemView()));
    tree.setRootVisible(false);
    tree.setShowsRootHandles(false);
    tree.setCellRenderer(new FileSystemTreeRenderer());
    tree.setToolTipText("");
    
    chooser.add("Center", treeScroll = new JScrollPane(tree));
    treeScroll.setPreferredSize(new Dimension(300, 300));

    approveButton = new JButton();
    approveButton.setAction(getApproveSelectionAction());

    cancelButton = new JButton();
    cancelButton.setAction(getCancelSelectionAction());
    cancelButton.setDefaultCapable(true);
    
    newFolderButton = new JButton();
    newFolderButton.setAction(getNewFolderAction());

    buttonPanel = new JPanel(new GridBagLayout());
    
    GridBagConstraints gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.insets = new Insets(0, 0, 0, 25);
    gridBagConstraints.anchor = GridBagConstraints.EAST;
    gridBagConstraints.weightx = 1;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridx = 0;
    buttonPanel.add(Box.createHorizontalStrut(0), gridBagConstraints);
    buttonPanel.add(newFolderButton, gridBagConstraints);

    gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.insets = new Insets(0, 0, 0, 6);
    gridBagConstraints.weightx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridx = 1;
    buttonPanel.add(approveButton, gridBagConstraints);

    gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.weightx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridx = 2;
    buttonPanel.add(cancelButton, gridBagConstraints);
    chooser.add("South", buttonPanel);

    updateView(chooser);
  }

  public Action getNewFolderAction() {
    return newFolderAction;
  }

  protected void installStrings(JFileChooser fc) {
    super.installStrings(fc);

    saveButtonToolTipText = UIManager
      .getString("DirectoryChooser.saveButtonToolTipText");
    openButtonToolTipText = UIManager
      .getString("DirectoryChooser.openButtonToolTipText");
    cancelButtonToolTipText = UIManager
      .getString("DirectoryChooser.cancelButtonToolTipText");

    newFolderText = UIManager.getString("DirectoryChooser.newFolderButtonText");
    newFolderToolTipText = UIManager
      .getString("DirectoryChooser.newFolderButtonToolTipText");
  }

  protected void uninstallStrings(JFileChooser fc) {
    super.uninstallStrings(fc);

    newFolderText = null;
    newFolderToolTipText = null;
  }

  public void uninstallComponents(JFileChooser chooser) {
    chooser.remove(treeScroll);
    chooser.remove(buttonPanel);
  }

  public FileView getFileView(JFileChooser fc) {
    return fileView;
  }

  protected void installListeners(JFileChooser fc) {
    super.installListeners(fc);

    tree.addTreeSelectionListener(new SelectionListener());
    
    fc.getActionMap().put("refreshTree", new UpdateAction());
    fc.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
      KeyStroke.getKeyStroke("F5"), "refreshTree");
  }

  private class UpdateAction extends AbstractAction {
    public void actionPerformed(ActionEvent e) {
      JFileChooser fc = getFileChooser();
      fc.rescanCurrentDirectory();
    }
  }

  protected void uninstallListeners(JFileChooser fc) {
    super.uninstallListeners(fc);
  }

  public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
    return new ChangeListener();
  }

  private void updateView(JFileChooser chooser) {
    if (chooser.getApproveButtonText() != null) {
      approveButton.setText(chooser.getApproveButtonText());
      approveButton.setMnemonic(chooser.getApproveButtonMnemonic());
    } else {
      if (JFileChooser.OPEN_DIALOG == chooser.getDialogType()) {
        approveButton.setText(openButtonText);
        approveButton.setToolTipText(openButtonToolTipText);
        approveButton.setMnemonic(openButtonMnemonic);
      } else {
        approveButton.setText(saveButtonText);
        approveButton.setToolTipText(saveButtonToolTipText);
        approveButton.setMnemonic(saveButtonMnemonic);
      }
    }

    cancelButton.setText(cancelButtonText);
    cancelButton.setMnemonic(cancelButtonMnemonic);

    newFolderButton.setText(newFolderText);
    newFolderButton.setToolTipText(newFolderToolTipText);
    newFolderButton.setVisible(((JDirectoryChooser)chooser).isShowingCreateDirectory());

    buttonPanel.setVisible(chooser.getControlButtonsAreShown());

    // ensure approve/cancel buttons have the same width
    approveButton.setPreferredSize(null);
    cancelButton.setPreferredSize(null);

    Dimension preferredSize = approveButton.getMinimumSize();
    preferredSize = new Dimension(Math.max(preferredSize.width, cancelButton
      .getPreferredSize().width), preferredSize.height);
    approveButton.setPreferredSize(preferredSize);
    cancelButton.setPreferredSize(preferredSize);    
  }

  /**
   * Ensures the file is visible, tree expanded and optionally
   * selected
   * 
   * @param fileToLocate
   * @param selectFile
   */
  private void findFile(File fileToLocate, boolean selectFile, boolean reload) {
    if (fileToLocate == null || !fileToLocate.isDirectory()) { return; }

    // build the canonical path so we can navigate the tree model to
    // find the
    // node
    File file = null;
    try {
      file = fileToLocate.getCanonicalFile();
    } catch (Exception e) {
      return;
    }

    // temporarly disable loading nodes in the background
    useNodeQueue = false;
    TreePath pathToSelect;

    try {
      // split the full path into individual files to locate them in
      // the tree
      // model
      List files = new ArrayList();
      files.add(file);
      while ((file = chooser.getFileSystemView().getParentDirectory(file)) != null) {
        files.add(0, file);
      }

      List path = new ArrayList();

      // start from the root
      DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getModel()
        .getRoot();
      path.add(node);

      DefaultMutableTreeNode current;

      boolean found = true;

      // ...and go through the tree model to find the files. Stop as
      // soon as
      // path is completely found or if one of the files in the path
      // is not
      // found.
      while (files.size() > 0 && found) {
        found = false;
        for (int i = 0, c = node.getChildCount(); i < c; i++) {
          current = (DefaultMutableTreeNode)node.getChildAt(i);
          File f = ((FileTreeNode)current).getFile();
          if (files.get(0).equals(f)) {
            path.add(current);
            files.remove(0);
            node = current;
            found = true;
            break;
          }
        }
      }

      // select the path we found, it may be the file we were looking
      // for or a
      // subpath only
      pathToSelect = new TreePath(path.toArray());
      if (pathToSelect.getLastPathComponent() instanceof FileTreeNode && reload) {
        ((FileTreeNode)(pathToSelect.getLastPathComponent())).clear();
        enqueueChildren((FileTreeNode)pathToSelect.getLastPathComponent());
      }
    } finally {
      // re-enable background loading
      useNodeQueue = true;
    }

    if (selectFile) {
      tree.expandPath(pathToSelect);
      tree.setSelectionPath(pathToSelect);
    }

    tree.makeVisible(pathToSelect); //scrollPathToVisible(pathToSelect);
  }

  private class ChangeListener implements PropertyChangeListener {

    public void propertyChange(PropertyChangeEvent evt) {
      if (JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY.equals(evt
        .getPropertyName())) {
        updateView(chooser);
      }

      if (JFileChooser.MULTI_SELECTION_ENABLED_CHANGED_PROPERTY.equals(evt
        .getPropertyName())) {
        if (chooser.isMultiSelectionEnabled()) {
          tree.getSelectionModel().setSelectionMode(
            TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
        } else {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清不卡一二三区| 欧美大白屁股肥臀xxxxxx| 激情综合色播五月| 日韩成人一区二区| 日韩av二区在线播放| 麻豆成人久久精品二区三区小说| 亚洲一区二区三区四区在线 | 久久综合九色综合久久久精品综合 | 粉嫩一区二区三区性色av| 国产综合一区二区| 国产麻豆视频一区| 丁香婷婷综合激情五月色| 国产精品亚洲视频| 97久久超碰国产精品| 91黄色激情网站| 在线精品国精品国产尤物884a| 在线观看国产日韩| 欧美日韩一区高清| 欧美一区二区三区四区久久| 精品国产第一区二区三区观看体验| 精品国产一区二区三区av性色| 欧美一区二区三级| 精品国产乱码久久久久久1区2区 | 欧美午夜免费电影| 欧美一三区三区四区免费在线看| 精品免费99久久| 国产亚洲欧洲997久久综合| 日韩一区欧美一区| 天天亚洲美女在线视频| 国内精品久久久久影院薰衣草| 国产一区二区日韩精品| 成人动漫一区二区在线| 91精品国产综合久久香蕉麻豆 | 亚洲国产精品成人久久综合一区| 亚洲蜜桃精久久久久久久| 日本人妖一区二区| 99久久久久久99| 5566中文字幕一区二区电影| 欧美国产视频在线| 亚洲va欧美va人人爽| 国产成人精品一区二| 欧美日韩专区在线| 欧美国产97人人爽人人喊| 午夜成人免费视频| 国产精品夜夜爽| 欧美一区二区三区四区高清| 亚洲男人的天堂一区二区| 老司机午夜精品| 日本精品视频一区二区三区| 精品国产髙清在线看国产毛片| 亚洲乱码国产乱码精品精可以看 | 亚洲午夜三级在线| 国产成人免费视频一区| 日韩欧美激情四射| 亚洲1区2区3区4区| av成人免费在线| 欧美国产精品v| 国产乱码精品一区二区三区五月婷 | 国产无遮挡一区二区三区毛片日本| 午夜婷婷国产麻豆精品| 色综合久久六月婷婷中文字幕| 精品久久人人做人人爰| 日韩电影在线观看网站| 欧美性大战久久久久久久蜜臀 | 色欧美88888久久久久久影院| 久久久久久久久久久久电影| 麻豆精品一区二区三区| 5858s免费视频成人| 亚洲成人中文在线| 欧美日韩国产片| 亚洲自拍另类综合| 欧美影视一区二区三区| 亚洲精品中文在线观看| 色综合中文字幕国产| 国产日韩欧美麻豆| 国产九色sp调教91| 国产欧美日韩在线看| 国产精品综合视频| 欧美激情在线免费观看| 成人激情黄色小说| ...xxx性欧美| 色婷婷综合五月| 亚洲二区在线观看| 欧美老年两性高潮| 日本系列欧美系列| 精品乱人伦小说| 国模冰冰炮一区二区| 日本一区二区三区四区| 99精品国产热久久91蜜凸| 亚洲精品乱码久久久久久日本蜜臀| 91女厕偷拍女厕偷拍高清| 亚洲一区视频在线观看视频| 884aa四虎影成人精品一区| 日本欧美大码aⅴ在线播放| 日韩欧美www| 国产精品99久久久久久似苏梦涵| 中文字幕一区日韩精品欧美| 99re免费视频精品全部| 无码av中文一区二区三区桃花岛| 欧美日韩国产综合一区二区三区| 日本三级亚洲精品| 欧美国产精品久久| 欧美体内she精高潮| 美脚の诱脚舐め脚责91| 中文字幕精品一区二区三区精品 | 视频一区欧美精品| 久久精品在这里| 在线精品视频免费播放| 久久国产精品99久久人人澡| 亚洲视频在线一区二区| 91精品国产综合久久久久久| 国产馆精品极品| 亚洲第一成人在线| 日韩欧美一级二级| 色综合天天综合色综合av | 色综合欧美在线视频区| 精品亚洲成a人| 亚洲国产cao| 久久久久免费观看| 欧美美女视频在线观看| 国产suv精品一区二区883| 午夜精品福利久久久| 中文一区一区三区高中清不卡| 欧美精品1区2区| 波多野结衣中文字幕一区二区三区| 日韩精品一二三四| 欧美一区二区在线不卡| 91麻豆国产精品久久| 国产乱淫av一区二区三区| 丝瓜av网站精品一区二区| 亚洲视频免费在线| 国产亚洲成av人在线观看导航| 欧美日韩日本视频| 91片黄在线观看| 成人久久18免费网站麻豆| 激情都市一区二区| 日韩精品高清不卡| 一区二区三区在线视频播放| 国产亚洲一区二区三区| 欧美大黄免费观看| 91精品国产综合久久香蕉麻豆| 91久久精品一区二区| www.亚洲在线| 成人免费观看视频| 懂色av中文一区二区三区| 黄色日韩网站视频| 老司机精品视频在线| 青青草一区二区三区| 亚洲国产aⅴ天堂久久| 亚洲成人激情综合网| 亚洲一区在线视频| 亚洲图片自拍偷拍| 亚洲成人一区二区| 亚洲成a人片在线观看中文| 一片黄亚洲嫩模| 亚洲一区二区三区四区在线观看| 亚洲美女视频在线| 亚洲自拍偷拍综合| 免费人成在线不卡| 秋霞成人午夜伦在线观看| 日本不卡一区二区| 蜜臀国产一区二区三区在线播放| 日韩精品高清不卡| 韩国欧美一区二区| 国v精品久久久网| av在线不卡电影| 在线亚洲免费视频| 69久久99精品久久久久婷婷| 在线播放中文字幕一区| 欧美va日韩va| 中文字幕精品一区二区三区精品 | 欧美日韩视频在线第一区| 337p亚洲精品色噜噜| 日韩精品一区二区在线| 久久综合九色综合97婷婷| 国产精品国产a级| 亚欧色一区w666天堂| 美女高潮久久久| 99国产精品国产精品毛片| 欧美丰满美乳xxx高潮www| 久久久亚洲精华液精华液精华液 | 欧美日韩亚洲另类| 久久久久久夜精品精品免费| 亚洲蜜桃精久久久久久久| 青青青伊人色综合久久| 99久久久久久| 正在播放一区二区| 国产精品第五页| 免费成人你懂的| 99久久99久久精品免费看蜜桃| 欧美一区二区三区免费在线看| 国产午夜精品在线观看| 亚洲动漫第一页| 国产98色在线|日韩| 欧美精品第1页| 亚洲欧洲日产国码二区| 麻豆视频一区二区| 91同城在线观看| 久久蜜臀中文字幕| 偷窥国产亚洲免费视频|