gpt4 book ai didi

java - 如何使 JFileChooser 默认为计算机 View 而不是我的文档

转载 作者:可可西里 更新时间:2023-11-01 12:46:18 24 4
gpt4 key购买 nike

在 JFileChooser 的 Windows 外观中,JFileChooser 对话框的左侧显示五个按钮:最近的项目、桌面、我的文档、计算机和网络。这些每个代表文件系统的 View ,如 Windows 资源管理器将显示的那样。除非调用 setSelectedFile() 或 setCurrentDirectory() 方法,否则 JFileChooser 似乎默认为我的文档 View 。

我试图让用户可以轻松地从多个映射的网络驱动器中选择一个,该驱动器应该出现在“计算机” View 中。有没有办法设置 JFileChooser 默认打开“计算机” View ?

我尝试了几种方法来强制执行它,最近的方法是找到根目录并将其设置为 currentDirectory,但这显示了该根节点的内容。最新的代码包含在下面。

private File originalServerRoot;
private class SelectOriginalUnitServerDriveListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JFileChooser origDriveChooser = new JFileChooser();
origDriveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
File startFile = new File(System.getProperty("user.dir")); //Get the current directory

// Find System Root
while (!FileSystemView.getFileSystemView().isFileSystemRoot(startFile))
{
startFile = startFile.getParentFile();
}

origDriveChooser.setCurrentDirectory(startFile);
origDriveChooser.setDialogTitle("Select the Mapped Network Drive");
int origDriveChooserRetVal = origDriveChooser.showDialog(contentPane,"Open");
if (origDriveChooserRetVal == JFileChooser.APPROVE_OPTION)
{
originalUnitServerRoot = origDriveChooser.getSelectedFile();

}
}
}

有没有一种方法可以让我默认选择“计算机” View (或网络,或任何其他 View ),或者有什么方法可以欺骗 JFileChooser?

编辑
感谢您快速而彻底的回答。我结合了 Hovercraft Full Of Eels 和 Guillaume Polet 的回答,尝试让代码适用于任何驱动器盘符。结果代码如下。再次感谢。

private File originalServerRoot;
private class SelectOriginalUnitServerDriveListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JFileChooser origDriveChooser = new JFileChooser();
origDriveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
File startFile = new File(System.getProperty("user.dir")); //Get the current directory

// Find System Root
while (!FileSystemView.getFileSystemView().isFileSystemRoot(startFile))
{
startFile = startFile.getParentFile();
}
//Changed the next line
origDriveChooser.setCurrentDirectory(origDriveChooser.getFileSystemView().getParentDirectory(rootFile));
origDriveChooser.setDialogTitle("Select the Mapped Network Drive");
int origDriveChooserRetVal = origDriveChooser.showDialog(contentPane,"Open");
if (origDriveChooserRetVal == JFileChooser.APPROVE_OPTION)
{
originalUnitServerRoot = origDriveChooser.getSelectedFile();

}
}
}

最佳答案

这是一个工作示例。它假设 C:\是有效路径。它使用 FileSystemView.getParentDir(File)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new Test().initUI();
}
});
}

protected void initUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
final JButton button = new JButton("Select files...");
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
final JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(
chooser.getFileSystemView().getParentDirectory(
new File("C:\\")));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showDialog(button, "Select file");
}
});
panel.add(button);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - 如何使 JFileChooser 默认为计算机 View 而不是我的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com