java - JComboBox:如何获得适用于 HTML 条目的键选择?

标签 java swing jcombobox

您好 :) 首先我使用的是 Java 6。

功能

当您使用JComboBox时,通常可以通过键入字符来选择条目。这很好。

问题

不幸的是,如果您的条目是 HTML 字符串,例如,这不起作用。 "<html><b>foo</b> <i>bar</i></html>" 。顺便说一句,我使用 HTML 主要是为了以不同的颜色显示我的条目。

解决方案,不好

因此,为了解决这个问题,我通过更改 JComboBox$DefaultKeySelectionManager 来实现我自己的 KeySelectionListener ,如果条目以 "<html>" 开头,则基本上忽略所有标签.

这有效。 但是:我错误地认为默认使用的是 JComboBox$DefaultKeySelectionManager 。为什么?因为它只处理输入的第一个字符。对于包含许多以相同字符开头的条目的长列表,这根本不方便。

处理输入框中输入的所有字符的好方法是 BasicComboBoxUI$DefaultKeySelectionManager (这是默认值)。问题是,这个与嵌套的 ComboBoxUI 交互。它需要它的 JList并调用getNextMatch(prefix, …) 。可悲的是JList.getNextMatch()不关心 HTML 条目。

我不能简单地扩展 BasicComboBoxUI 以获得不同的 JList 实现,因为给定的 LAF 决定使用哪个 UI。

有什么想法吗?我猜 Java 7 没有解决这个问题?

最佳答案

这确实是一个皮塔饼,我也遇到过同样的问题。最后,组合框使用模型中包含的对象的 toString() 方法进行键选择。最简单的方法是将所有 HTML 字符串包装到具有 toString() 方法的对象中,该方法返回用于选择的文本,并使用单元格渲染器来渲染 HTML。例如:

public class HtmlOption {
    private final String rawText;
    private final String htmlText;

    private HtmlOption(String rawText, String htmlText) {
        this.rawText = rawText;
        this.htmlText = htmlText;
    }

    public String toString() {
        return this.rawText;
    }

    // getters, equals and hashCode omitted
}

然后用这些对象填充你的组合:

model.addElement(new HtmlOption("foo bar", "<html><b>foo</b> <i>bar</i></html>"));

并为组合框设置渲染器

setText(((HtmlOption) value).getHtmlText());

关于java - JComboBox:如何获得适用于 HTML 条目的键选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10520406/

相关文章:

Java 编译器无法推断泛型链上的类型

java - Hibernate 可以更改结构但保留数据吗?

java - Spring REST服务: how to configure to remove null objects in json response

java - 在 jTable 中动态解析日期

java - 在 Swing 中更改 JTable 列中的下拉内容

java - Java中线程安全类的解释

java - 尝试从另一个类修改 JFrame 时出现空指针异常?

java - 在 JPanel 的中心添加一个矩形

java - 如何在 JComboBox 中正确渲染我自己的类?

java - 填充 JComboBox 时遇到困难