我有一个按钮,点击我希望弹出JFileChooser。我试过这个
JButton browse= new JButton("Browse");
add(browse);
browse.addActionListener(new ClassBrowse());
public class ClassBrowse implements ActionListener {
public void actionPerformed(ActionEvent e) {
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
// return the file path
} catch (Exception ex) {
System.out.println("problem accessing file"+file.getAbsolutePath());
}
}
else {
System.out.println("File access cancelled by user.");
}
}
}
上面的Bhe给出错误The method showOpenDialog(Component) in the type JFileChooser is not applicable for the arguments (ClassName.ClassBrowse)
另外,我希望它返回完整的文件路径。我该怎么做?
答案 0 :(得分:1)
ActionListener
不是Component
,您无法将this
传递给文件选择器。File#getCanonicalPath
以获取文件的完整路径,但不能return
,因为actionPerformed
只返回void
(或不返回类型)。但是,你可以设置一些其他变量,调用另一种方法,甚至设置JLabel
或JTextField
的文本......例如...... 答案 1 :(得分:0)
您可以设置一个实例变量,该变量在actionPerformed中保存文件名字符串,例如
private String fileName;
.......
your code
.......
public void actionPerformed(ActionEvent e) {
int returnVal = fileChooser.showOpenDialog((Component)e.getSource());
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
fileName = file.toString();
} catch (Exception ex) {
System.out.println("problem accessing file"+file.getAbsolutePath());
}
}
else {
System.out.println("File access cancelled by user.");
}
}
答案 2 :(得分:0)
您可以将JButton所在的容器(可能是JFrame,JDialog,JApplet或任何内容)传递给
fileChooser.showOpenDialog()
并且filechooser将作为该容器顶部的模式对话框打开。