如何在JFileChooser中禁用文件输入字段?

Sup*_*eme 2 java swing

我希望用户只从现有文件中选择文件,并且不想让他输入文件名.
那么我们如何在JFileChooser中禁用文件输入字段? 谢谢.

Gil*_*anc 8

我认为你真正想要的是让用户选择一个现有的文件.

您可以为JFileChooser编写一个动作侦听器来检查并确保该文件存在.

您仍然希望用户能够键入文件输入字段,以便限制JFileChooser中显示的内容,

例如,如果用户键入*.txt,则仅.txt显示文件.如果用户键入one*,则仅显示以字母1开头的文件.


小智 6

完全同意吉尔伯特.但在奇怪的情况下,如果你真的想要你所要求的:在plaf实现中定义的那个文本字段,你可以使用,比如说反射,来获取它并改变它,或者你可以尝试通过子组件迭代,希望只有JTextArea才是你要找的人.以下示例使用反射并适用于Metal外观:

import java.awt.Frame;
import java.lang.reflect.Field;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.plaf.metal.MetalFileChooserUI;

public class FileChooser {

public static void main(String[] args) throws Exception{ Frame f = new JFrame(); JFileChooser jFileChooser = new JFileChooser(); MetalFileChooserUI ui = (MetalFileChooserUI)jFileChooser.getUI(); Field field = MetalFileChooserUI.class.getDeclaredField("fileNameTextField"); field.setAccessible(true); JTextField tf = (JTextField) field.get(ui); tf.setEditable(false); tf.setEnabled(false); jFileChooser.showDialog(f, "Select"); f.dispose(); }

}