我正在对Swing应用程序进行增强(以前从未完成过Swing编程),并且需要能够以JList粗体显示单个文本项.我已经看到了一些帖子,他们说只是把"<html><b>"和"</b></html>"串绕.你是认真的,这似乎是一个黑客.将来我们也可能想要更改JList中项目的背景颜色 - HTML标签也可以吗?
我见过的另一个建议是setCellRenderer()用你自己的实现ListCellRenderer接口的对象调用JList上的方法.但我不确定能做到我们想要的.似乎ListCellRenderer有一种getListCellRendererComponent()方法可以设置项目的显示方式,具体取决于项目是选中还是具有焦点.但是我们希望JList中的一个项目是粗体,具体取决于我们的业务逻辑确定的内容,并且它可能是既未选择也没有焦点的项目.我没有看到任何这方面的好例子ListCellRenderer,所以我不确定这是否是我们想要的方法.
ListCellRenderer组件还获取要显示的对象,因此您可以根据所需的逻辑进行格式化.你可以找到介绍定制渲染在这里和渲染的例子在这里(它设置基于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;
}
}
Run Code Online (Sandbox Code Playgroud)