Java - 从 JFileChooser 中删除组件(文件类型)

2024-02-08

如何从 JFileChooser 中删除组件(文件类型);标签及其组合框?

我有以下代码:

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setDialogTitle("Select Folder");
fileChooser.setApproveButtonText("Select Folder");
fileChooser.setAcceptAllFileFilterUsed(false);

hideComponents(fileChooser.getComponents());

private void hideComponents(Component[] components) {

for (int i= 0; i < components.length; i++) {
  if (components[i] instanceof JPanel)
    hideComponents(((JPanel)components[i]).getComponents());
  else if (//component to remove)//what do I check for in here?
    components[i].setVisible(false);
}

我谨表示不同意。那里is我一直成功地使用它,特别是与 JFileChooser 一起使用,特别是让这个被诅咒的野兽同时适用于 DOS 和 Mac。网上有很多例子;这是另一个,从我的工作小程序中挑选出来的。 (此代码片段还设置所有组件的背景颜色)。

简而言之:最初的海报是在正确的轨道上 - 迭代 JFileChooser.getComponents()。它们并不容易识别组件,所以我所做的就是查找文本标签,然后获取其所需的祖先。然后,您可以使用 Container.getLayout().remove(component) 将其从布局中删除,或者可以 setVisible(false),或者有时可以 setPreferredSize(new Dimension(0,0)) 使其消失。

// in wrapper:
modifyJChooser(fileChooser.getComponents(), Color.white);

// in component:
private void modifyJChooser(Component[] jc, Color bg) {

    for (int i = 0; i < jc.length; i++) {
        Component c = jc[i];

        // hide file name selection
        if (c.getClass().getSimpleName().equals("MetalFileChooserUI$3")) {
            c.getParent().setVisible(false);
        }

        if (c instanceof JComboBox) {
            Object sel = ((JComboBox) c).getSelectedItem();
            if (sel.toString().contains("AcceptAllFileFilter")) {
                c.setVisible(false);
            }
        } else if (c instanceof JLabel) {
  // **** This is the part that the original poster is looking for ****
            String text = ((JLabel) c).getText();
            if (text.equals("Files of Type:") || text.equals("File Name:") || text.equals("Folder Name:")) {
                c.getParent().getParent().remove(c.getParent());
            }
        } else if (c instanceof JButton) {
            JButton j = (JButton) c;
            String txt = j.getText();
            if (txt != null) {
                if (JCHOOSER_NEW_FOLDER.equalsIgnoreCase(txt)) {
                    j.getParent().setVisible(false); // Disable New Folder on Mac OS
                } else if (JCHOOSER_BTN_CANCEL.equalsIgnoreCase(txt)) {
                    Component parent = c.getParent();
                    ((Container) parent).remove(c);
                }
            }
        }

        if (c instanceof Container)
            modifyJChooser(((Container) c).getComponents(), bg);

        c.setBackground(bg);
    }

}

Caveat:这会在移除的组件曾经所在的位置留下一点间隙。我无法确定其来源;如果有人有线索,请发帖。

Result is like this (note that I make other modifications not shown in code snippet); enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - 从 JFileChooser 中删除组件(文件类型) 的相关文章

随机推荐

  • Webpack启动,导入错误

    我正在开始使用 Webpack 但已经遇到了以下问题 我创建了一个 app index js 文件 如文档中指定的 我还创建了一个 index html 文件 从文档中复制了 HTML 和 CSS 我在 CLI 中运行了正确的命令 包括生成
  • Artifactory 缺少 Android 依赖项

    相关找不到runtime jar android arch lifecycle runtime 1 0 0 https stackoverflow com questions 50563338 could not find runtime
  • 如何仅选择 BLOB 列的一部分

    在 SQLite 数据库中 如何从 BLOB 字段中仅选择 1kb 我想象它是这样的 SELECT PART field name startIndex bytes AS data FROM table 这可能吗 Use substr ht
  • JTextArea 中 setText() 的机制?

    我尝试在我的中显示一些文字JTextArea在运行时 但是当我使用循环时setText按顺序显示文本 它只显示最后一个循环的文本 这是我的代码 private void jButton1ActionPerformed java awt ev
  • 如何仅选择巨大二进制文件(文件)的一部分?

    我的问题是这样的 我有可能将巨大的文件存储在 SQL Server 2008 上的二进制 图像 字段中 gt 1GB 如果我使用常规 select 语句返回整个二进制文件 则查询需要一分钟多的时间才能将结果返回到我的 NET 程序 并且我的
  • Android 11 (R) 文件路径访问

    根据文档 Android R 中授予文件路径访问权限 从 Android 11 开始 具有 READ EXTERNAL STORAGE 权限的应用可以使用直接文件路径和本机库读取设备的媒体文件 这项新功能使您的应用程序能够更顺畅地与第三方媒
  • 如何制作全宽 SwiftUI 列表?

    我想要我的List为全宽 填充是自动添加的 出于我的目的 我不希望这样 这只是示例代码 这是我的代码 struct ViewModel Identifiable let title String let id UUID struct Con
  • jquery在for循环中延迟

    所以我一直在研究 jquery deferred 但在循环中检索数据时遇到问题 延迟部分似乎只处理最终迭代中的数据 如果数组中只有一项 它也会失败 所以我不确定发生了什么 我有各种城市名称 我试图从谷歌地图反向地理编码中获取每个城市的中心坐
  • ImageView的src和background有什么区别

    我对使用感到困惑src or background for an ImageView 我知道前者的意思是这个的内容ImageView后者指的是背景ImageView 但如何决定使用哪一个呢 我看不出有什么区别 所有视图都可以拍摄背景图像 T
  • 如何展平Nuget包内容文件?

    Nuget 包问题 buildAction copyToOutput flatten 被忽略 包项目 ThisProject vbproj Net 标准库 2 0 nuspec 文件
  • 提取单词周围的单词并将结果插入数据框列中

    我有一个数据框 df 有 3 列 如下所示 company year text Apple 2016 The Company sells its products worldwide through its 我想在以下位置搜索 产品 df
  • 如何通过 REST API 创建 Pod

    如何使用 REST API 创建 Pod 我查看了 Kubernetes API 文档 https kubernetes io docs reference generated kubernetes api v1 10 strong wri
  • 我可以使用 vs2010 开发 .net 4.5 应用程序吗

    我已经安装了 net 4 5 框架http www microsoft com en in download details aspx id 30653 http www microsoft com en in download detai
  • 如何使用 Perl 的 XML::Twig 将子元素添加到 XML?

    我有以下 XML 文件
  • 用C#创建QRCode并保存为图像

    我从 Web 应用程序上的 URL 接收数据 该数据是使用 API 响应动态生成的 我必须把它放在一个QRCode并将这个QRCode发送回前端供我的客户下载 我们使用 C 作为后端 使用 React js 作为前端 我尝试过使用ZXIng
  • 确定印度拉米纸牌是否为获胜牌 - Java

    我正在寻找一种有效的解决方案来确定一手牌是否是印度拉米纸牌中的获胜手牌 印度拉米纸牌在混合方面与金罗米纸牌类似 人们可以融合相同花色的序列 顺子 或融合一组相同的值 序列和集合都应至少包含 3 张牌 与金罗米牌不同 印度拉米牌一手牌由 13
  • 使用 SBT 运行 JUnit 测试

    我有一个 0 13 7 SBT 项目 有几个子项目 其中之一叫做webapp 并且它有很多JUnit测试在webapp src test java 运行时 sbt webapp test 只有ScalaTest测试已运行 但没有 JUnit
  • 向 MQ 发送消息时如何删除默认的 Spring JMS 模板标头?

    使用 Java Spring 与 WebSphere MQ 交互并尝试向其发送消息 Spring 不断向其添加以下标头信息 RFH MQSTR
  • 如何更改 SQL Server 的默认语言?

    现在当我查询时 SELECT language 它得到 us english 但我需要俄语 我不能使用SET LANGUAGE russian对于每个查询 我需要默认设置它 对于所有新会话 使用 SQL Server Management
  • Java - 从 JFileChooser 中删除组件(文件类型)

    如何从 JFileChooser 中删除组件 文件类型 标签及其组合框 我有以下代码 JFileChooser fileChooser new JFileChooser fileChooser setFileSelectionMode JF