这是我写的一个例子:
JFileChooser x=new JFileChooser();
int returnVal=x.showOpenDialog(this);
File file=x.getSelectedFile();
System.out.println(file.getName());
即使该文件不是实际文件,当您调用
file.getName()
时,它仍然会打印出框中的内容。当我输入随机字符串时,它返回该字符串,即使它不是文件。
我能够通过使用类似问题的另一个答案的主要概念来实现这一点:
private JTextField getFilenameTextField(Container cont)
{
for (Component c : cont.getComponents())
{
if (c instanceof JTextField)
{
return (JTextField)c;
}
else if (c instanceof Container)
{
JTextField textField = getFilenameTextField(((Container) c));
if (textField != null) return textField;
}
}
return null;
}
这将采用某个容器(在本例中为 JFileChooser 对象)作为参数,并递归搜索其每个组件和子组件,直到找到 JTextField。如果由于某种原因找不到,则返回
null
。然而,这应该可以正常工作,因为标准的普通 JFileChooser 应该始终只有一个文本字段。
然后,您可以使用 JTextField 类的
getText()
和 setText()
方法来检索和修改该文本字段中包含的文本:
JFileChooser chooser = new JFileChooser();
JTextField filenameTextField = getFilenameTextField(chooser);
String filename = filenmaeTextField.getText();
filenameTextField.setText("THIS");
如果您想在用户选择“确定”/“保存”/“选择”按钮时检索此值,您可以重写 JFileChooser 类的
approveSelection()
方法,以便在用户按下此按钮时执行一些代码:
JFileChooser chooser = new JFileChooser()
{
@Override
public void approveSelection()
{
JTextField filenameTextField = getFilenameTextField(this);
...
}
};
当您不想批准某个选择时,请不要忘记对
super.approveSelection()
和 return
ing 进行适当的调用。我会研究覆盖 approveSelection()
方法以获取更多信息!