gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:48:32 26 4
gpt4 key购买 nike

您好 :) 首先我使用的是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com