java - JFileChooser:设置名称文本字段未启用

标签 java swing jfilechooser

我使用 JFileChooser 让用户保存文件。 但我不希望用户选择一个名称来保存文件。不得启用名称文本字段。

我阅读了文档,但没有找到这样的方法或属性。

最佳答案

评论中的Squiddie给你推荐了一个很好的解决方案。但是,如果仍然想禁用文本字段,以便文件名对用户可见(使用 JFileChooser.DIRECTORIES_ONLY 则),您可以使用以下代码来“获取”从选择器中的文本字段并将其禁用。

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TextFieldFromFileChooser {
    public TextFieldFromFileChooser() {
        JFileChooser chooser = new JFileChooser();
        JTextField fileChooserTextField = getFileChooserTextField(chooser);
        fileChooserTextField.setText("I name this file.txt");
        fileChooserTextField.setEditable(false);
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            // Selected file has the name of the fileChooserTextField' text
            System.out.println(chooser.getSelectedFile().getAbsolutePath());
        }
    }

    private static JTextField getFileChooserTextField(JFileChooser chooser) {
        JTextField f = null;
        for (Component c : getComponents(chooser)) {
            if (c instanceof JTextField){
                f = (JTextField) c;
                break;
            }
        }
        return f;
    }

    private static List<Component> getComponents(JComponent component) {
        List<Component> list = new ArrayList<>();
        for (Component c : component.getComponents()) {
            if (c instanceof JPanel)
                list.addAll(getComponents((JPanel) c));
            else if (c instanceof JTextField)
                list.add((JTextField) c);
        }
        return list;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new TextFieldFromFileChooser());
    }
}

请注意,这已使用 Windows LAF 和 java 的库存 LAF 进行了测试。如果您的选择器有 2 个文本字段(我不知道在 MAC/Linux 上如何),您可能会遇到问题,因为您不知道禁用哪个文本字段。

关于java - JFileChooser:设置名称文本字段未启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54251586/

相关文章:

java - 覆盖 JTable 的 DefaultTableCellRenderer 以将 JTable 中的所有单元格居中

java - 在Java Swing中,有没有办法将文件保存到某种 'lib'文件夹中?

java - Axis2 错误 - java.lang.NoClassDefFoundError : org/apache/ws/commons/schema/XmlSchema

java - 如何在不同的 ImageView 中设置不同的裁剪图像

Java Swing JButton 时间延迟(闪烁)

Java如何禁用JPanel组件自动垂直调整大小

java - 我要翻译的 java swing String 在哪里?

java - 使用 JFileChooser 制作备份副本

java - 如何检查使用@SessionAttributes创建的 session 是否存在(Spring MVC)

java - Kafka AvroSchema 未生成,当一个类具有数据类型为对象类的字段时