如何在组合框中显示没有扩展名的文件名?

短跑运动员

我的用例如下:我想要一个组合框,它在每次打开时刷新的目录中显示过滤的文件列表。我还希望组合框中显示的字符串是没有目录或扩展名的文件名(它们是我不想向用户公开的实现细节)。

我已经实现了ComboBoxModel如下:

public class XMLComboModel extends DefaultComboBoxModel<Path> implements PopupMenuListener {

public static final String EXT = ".xml";
private final Path directory;

public XMLComboModel(String pathName) {
    this.directory = Paths.get(pathName);
    populateModel();
}

public Path getSelectedPath() {
    return (Path) getSelectedItem();
}

@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    populateModel();
}

private void populateModel() {
    removeAllElements();
    try {
        Files.newDirectoryStream(directory, "*" + EXT).forEach(this::addElement);
        if (getSelectedPath() != null) {
            for (int i = 0; i < getSize(); i++) {
                if (getElementAt(i).compareTo(getSelectedPath()) == 0)
                    setSelectedItem(getElementAt(i));
            }
        }
    } catch (IOException ex) {
        LOG.log(Level.SEVERE, null, ex);
    }
}

PopupMenuListener为了清楚起见,我省略了一些方法

这工作正常,只是它在组合框中显示完整路径,这不是我想要的。我认为定制路径显示的最简单方法是定制渲染器。我尝试了这个:

comboBox.setRenderer(new BasicComboBoxRenderer() {
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
                boolean isSelected, boolean cellHasFocus) {
        Path path = (Path) value;
        String fileName = path.getFileName().toString().replace(EXT, "");
        Component component = super.getListCellRendererComponent(list, fileName, index,
                    isSelected, cellHasFocus);
        return component;
    }
});

不幸的是,这不起作用。它正确显示截断的文件名,但现在setSelectedItem使用 theString而不是 the Path- 这有道理但不会匹配模型中的路径。

我的选择似乎是:

  • 编写我自己的自定义组件来复制BasicComboBoxRenderer标签中的文本以外的功能
  • setSelectedItem在模型中覆盖以查找具有给定文件名的路径。

其中第二个更容易实现:

@Override
public void setSelectedItem(Object item) {
    for (int i = 0; i < getSize(); i++) {
        if (super.getElementAt(i).equals(Paths.get(item.toString()))) {
            super.setSelectedItem(super.getElementAt(i));
            return;
        }
    }
}

但这似乎很笨重,因为我已经Path从模型中传递了一个,最好能Path回来。我是否缺少一种更简单的方法来实现这一目标?

卡米克

但现在使用字符串而不是路径调用 setSelectedItem

渲染器与组合框模型的其他方法无关。

如果要将Path对象传递setSelectedItem(...)方法,则需要确保Path对象实现该equals(...)方法,以便模型可以选择正确的Path.

然后只需创建自定义渲染器来显示Path您想要显示对象的任何部分

找回 Path 就好了。

如果您的模型包含 Path 对象,则该getSelectedItem()方法将返回一个 Path 对象。您需要将其转换为路径,或使用您的getSelectedPath()方法。

所以你不需要覆盖 DefaultComboBoxModel 的任何方法,只需要添加getSelectedPath()方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何在Swift中从文件扩展名中拆分文件名?

来自分类Dev

重命名所有“。” 文件名中扩展名“ _”(扩展名除外)

来自分类Dev

没有扩展名VBA的文件名

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

如何在iOS共享扩展名中获取共享库的文件名

来自分类Dev

如何在虚幻引擎中获取不带扩展名的文件名?

来自分类Dev

如何在带有FAL和自己的Extbase扩展名的Typo3 solr扩展名中获取文件名

来自分类Dev

如何在PostgreSQL中从文件名获取文件扩展名?

来自分类Dev

如何在Laravel存储中查找没有特定文件扩展名的文件?

来自分类Dev

AppleScript中没有扩展名的文件名

来自分类Dev

如何使Krusader显示带有扩展名的文件名?

来自分类Dev

从具有多个扩展名的文件名中删除某些扩展名

来自分类Dev

如何在Apache Velocity模板lang中获取不带扩展名的文件名?

来自分类Dev

如何使Krusader显示带有扩展名的文件名?

来自分类Dev

如何在bash中检索文件名或扩展名

来自分类Dev

如何在链接中获取文件名的扩展名

来自分类Dev

如何在php中以.txt扩展名创建随机文件名?

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

如何在PHP中以最佳方式从URL获取带有扩展名的文件名?

来自分类Dev

如何删除文件名中没有给定字符串的某些扩展名文件?

来自分类Dev

如何在带有FAL和自己的Extbase扩展名的Typo3 solr扩展名中获取文件名

来自分类Dev

如何在GNU Makefile中仅获取不带扩展名的文件名?

来自分类Dev

如何在目标C中读取没有扩展名的文件

来自分类Dev

如何下载网址中没有文件名和文件扩展名的文件

来自分类Dev

AppleScript中没有扩展名的文件名

来自分类Dev

在Vifm中复制没有扩展名的文件名

来自分类Dev

如何从没有扩展名的路径中获取特定文件名python

来自分类Dev

如何使用php获取没有扩展名的网站文件名和?id=someid

来自分类Dev

PHP - 目录列表脚本 - 显示没有文件扩展名的文件名

Related 相关文章

  1. 1

    如何在Swift中从文件扩展名中拆分文件名?

  2. 2

    重命名所有“。” 文件名中扩展名“ _”(扩展名除外)

  3. 3

    没有扩展名VBA的文件名

  4. 4

    如何在bash终端中从%f获取不带扩展名的文件名?

  5. 5

    如何在iOS共享扩展名中获取共享库的文件名

  6. 6

    如何在虚幻引擎中获取不带扩展名的文件名?

  7. 7

    如何在带有FAL和自己的Extbase扩展名的Typo3 solr扩展名中获取文件名

  8. 8

    如何在PostgreSQL中从文件名获取文件扩展名?

  9. 9

    如何在Laravel存储中查找没有特定文件扩展名的文件?

  10. 10

    AppleScript中没有扩展名的文件名

  11. 11

    如何使Krusader显示带有扩展名的文件名?

  12. 12

    从具有多个扩展名的文件名中删除某些扩展名

  13. 13

    如何在Apache Velocity模板lang中获取不带扩展名的文件名?

  14. 14

    如何使Krusader显示带有扩展名的文件名?

  15. 15

    如何在bash中检索文件名或扩展名

  16. 16

    如何在链接中获取文件名的扩展名

  17. 17

    如何在php中以.txt扩展名创建随机文件名?

  18. 18

    如何在bash终端中从%f获取不带扩展名的文件名?

  19. 19

    如何在PHP中以最佳方式从URL获取带有扩展名的文件名?

  20. 20

    如何删除文件名中没有给定字符串的某些扩展名文件?

  21. 21

    如何在带有FAL和自己的Extbase扩展名的Typo3 solr扩展名中获取文件名

  22. 22

    如何在GNU Makefile中仅获取不带扩展名的文件名?

  23. 23

    如何在目标C中读取没有扩展名的文件

  24. 24

    如何下载网址中没有文件名和文件扩展名的文件

  25. 25

    AppleScript中没有扩展名的文件名

  26. 26

    在Vifm中复制没有扩展名的文件名

  27. 27

    如何从没有扩展名的路径中获取特定文件名python

  28. 28

    如何使用php获取没有扩展名的网站文件名和?id=someid

  29. 29

    PHP - 目录列表脚本 - 显示没有文件扩展名的文件名

热门标签

归档