如果你在Swing中打开一个对话框,比如一个JFileChooser,它就像这个伪代码:
swing event thread {
create dialog
add listener to dialog close event {
returnValue = somethingFromDialog
}
show dialog
(wait until it is closed)
return returnValue
}
我的问题是:这怎么可能有效?如您所见,线程等待返回,直到对话框关闭.这意味着Swing事件线程被阻止.然而,人们可以与对话框进行交互,AFAIK需要该对话框才能运行.
那怎么办?
我觉得应该有一个简单的方法来做到这一点,但我无法弄清楚.我有一个允许用户选择目录的JFileChooser.我想显示目录中的所有文件以向用户提供一些上下文,但只有目录应被接受作为选择(可能在选择文件时禁用"打开"按钮).有这么简单的方法吗?
我正在JFileChooser我的程序中,但只拍摄图像.所以我决定添加过滤器:
import javax.swing.*;
public class fileChooser {
public static void main(String[] args) {
JPanel panel = new JPanel();
final JFileChooser fc = new JFileChooser();
int file = fc.showOpenDialog(panel);
fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
}
}
Run Code Online (Sandbox Code Playgroud)
我直接从Java教程那里得到了.但Eclipse强调以下内容为错误:
fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我想在Windows上将我的JFileChooser的默认目录更改为"我的音乐".这个目录C:\Users\Fre\Music在我的帐户上,因为我的用户名是Fre
默认设置为开启C:\Users\Fre\Documents(取决于我认为的OS).我怎么能改变这个?
我有一个简单的JFileChooser以下面的方式设置
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
chooser.setFileFilter(new FileFilter() {
...
});
int v = chooser.showOpenDialog(this);
if (v == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
System.out.println(file.getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)
如您所见,此FileChooser从当前目录开始,在我的Netbeans项目中,该目录是项目文件夹的根目录.这是问题:当我选择一个文件并打印出绝对路径时,它包含"."在路径中.例如,我得到的输出是:
/Users/MyName/Folder1/Folder2/./Temp.xls
Run Code Online (Sandbox Code Playgroud)
当然,这很奇怪,特别是因为我正在向用户显示这个.现在,我可能是hacky并做一些有趣的子串处理东西来摆脱那"/./"部分.但是......是否有一种非懒惰的程序员方法来解决这个问题?提前致谢!
我试图通过这样的东西(使用commons-io)在JFilechooser中设置目录路径:
String fileContents = IOUtils.toString(new FileInputStream("path.txt"));
File theDirectory = new File(fileContents);
filechooser = new JFileChooser();
fileChooser.setCurrentDirectory(theDirectory);
filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
Run Code Online (Sandbox Code Playgroud)
我正在使用getCanonicalPath()来获取路径并写入文件path.txt
path = file.getCanonicalPath();
Run Code Online (Sandbox Code Playgroud)
我不打算把我的所有代码放在这里,但我确信程序会在path.txt中写入和读取路径.我没有收到任何错误,但每次运行程序时,它总是在我的文件夹中打开JFilechooser.我做错了什么?
我知道设置Java中不存在创建时间戳,因为Linux没有它,但有没有办法在Java中设置文件(Windows)创建时间戳?我有一个基本的修改时间戳编辑器,我在这里制作.
import java.io.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
public class chdt{
static File file;
static JFrame frame = new JFrame("Input a file to change");
public static void main(String[] args) {
try{
final JFileChooser fc = new JFileChooser();
fc.setMultiSelectionEnabled(false);
//BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//System.out.println("Enter file name with extension:");
//String str = bf.readLine();
JOptionPane.showMessageDialog(null, "Input a file to change.");
frame.setSize(300, 200);
frame.setVisible(true);
int retVal = fc.showOpenDialog(frame);
if (retVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
frame.setVisible(false);
} else {
JOptionPane.showMessageDialog(null, …Run Code Online (Sandbox Code Playgroud) 我正在使用Netbeans 7.1.2创建一个应用程序,我正在使用文件选择器,但我不希望文件选择器获取文件,而是我希望它返回它当前所在目录的完整路径.

当用户在此处单击打开时,我希望它返回完整路径而不是文件.我该怎么做呢?
我只是想知道:Gmail如何使用Windows/Mac文件选择器上传文件?有没有办法在Java中这样做?
就个人而言,我不喜欢它的JFileChooser外观,我认为我的用户能够使用他们更习惯的东西会更好.有人提示吗?
我正在尝试使用保存文件JFileChooser.但是,我似乎遇到了一些麻烦.这是我的代码:
if (e.getSource() == saveMenu) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
FileNameExtensionFilter xmlFilter = new FileNameExtensionFilter("xml files (*.xml)", "xml");
// add filters
chooser.addChoosableFileFilter(xmlFilter);
chooser.setFileFilter(xmlFilter);
int result = chooser.showSaveDialog(Simulation.this);
if (result == chooser.APPROVE_OPTION) {
writeToXML(chooser.getSelectedFile());
}
}
Run Code Online (Sandbox Code Playgroud)
这不会强制文件具有.xml扩展名,因此我尝试使用以下代码强制使用扩展名.xml保存文件
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = null;
try {
xmlWriter = new XMLWriter(new OutputStreamWriter(
new FileOutputStream(f+".xml"), "UTF8"),
format);
Run Code Online (Sandbox Code Playgroud)
然而,这个我无法阻止写入用户xpto.xml的JFileChooser,如果他们这样做,该文件将有"两个扩展":这将是一个文件名为xpto.xml.xml
所以我的问题是:
JFileChooser默认保存xml文件?