我正在对Swing应用程序进行增强(之前从未完成过Swing编程),并且需要能够以JList
粗体创建单个文本项。我看过一些帖子,他们说只是将"<html><b>"
和"</b></html>"
放在字符串周围。你是认真的,这似乎是一个黑客。将来我们也可能想要更改JList中项目的背景颜色 - HTML标签也可以吗?
我看到的另一个建议是使用您自己的实现setCellRenderer()
接口的对象调用JList上的ListCellRenderer
方法。但我不确定能做到我们想要的。似乎ListCellRenderer
有getListCellRendererComponent()
方法,您可以在其中设置项目的显示方式,具体取决于项目是选中还是具有焦点。但是我们希望JList中的一个项目是粗体,具体取决于我们的业务逻辑确定的内容,它可能是既未被选中也没有焦点的项目。我没有看到这个ListCellRenderer
的任何好例子,所以我不确定这是否是我们想要的方法。
答案 0 :(得分:6)
ListCellRenderer组件还获取要显示的对象,因此您可以根据所需的逻辑进行格式化。您可以找到自定义渲染的介绍here和渲染器here的示例(它根据dnd位置设置背景,但其他逻辑的想法也相同)。
以下代码可让您了解如何实施。
class MyCellRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if ("TEST".equals(value)) {// <= put your logic here
c.setFont(c.getFont().deriveFont(Font.BOLD));
} else {
c.setFont(c.getFont().deriveFont(Font.PLAIN));
}
return c;
}
}