我正在用java开发一个项目,用户必须选择一个要通过jfilechooser上传的文件。无论如何都要使文本字段只读,以便您只能通过单击文件来选择文件,而不是通过在文本字段中写入来选择文件。我希望我把我的问题说清楚了;D
5 回答
如果您的意图是确保用户选择了文件而不是目录(您对其他答案的回复暗示了这一点),您可以使用FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
. 但是,这是您实例化文件选择器时的默认设置,因此除非您的代码在某些时候更改了该设置,否则您不需要显式设置它。
为了您的观看乐趣:http: //java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
如果您想在关闭文件选择器之前确保输入的文件名有效,那么您应该能够执行以下操作:
JFileChooser chooser = new JFileChooser(...)
{
public void approveSelection()
{
if (getSelectedFile().exists())
super.approveSelection();
else
JOptionPane.showMessageDialog(this, "Selected file does not exist");
}
};
我不相信这是直接可能的——从 API来看,我相信情况并非如此。您可以通过注册一个在每次按键后清除文本框的侦听器来模拟它。
但是,您确定要这样做吗?就个人而言,如果我使用以这种方式瘫痪的文件选择器,我会非常沮丧,特别是如果我从某个地方将文件路径复制到剪贴板并被迫手动下降通过一堆目录,以及其他情况.
您是否有特殊原因要削弱用户界面?因为我看不出有任何正当理由这样做...
这并不是真正的答案尝试,但我会质疑为什么你想让文本字段只读。您正在限制用户,究竟有什么好处?改变文件选择器的标准预期行为通常不是一个好的方法,除非你有很好的理由这样做。
所以,对不起,这不是一个真正的答案,但请考虑一下你为什么要这样做。作为个人喜好,我喜欢能够在文本字段中书写。这使我能够进行粘贴,从而可以非常快速和简单地从一个目录导航到另一个目录。
我认为做到这一点的唯一方法是提供你自己的FileChooserUI
并setUI()
在你的JFileChooser
. 当您从javax.swing.plaf
包中子类化现有实现时,执行此操作可能并不多,但问题是您绕过了整个 PLAF 机制;更改全局 L&F 将不适用于您的文件选择器。