如何使JList中的一个项目加粗?

时间:2011-06-03 07:02:54

标签: java swing jlist

我正在对Swing应用程序进行增强(之前从未完成过Swing编程),并且需要能够以JList粗体创建单个文本项。我看过一些帖子,他们说只是将"<html><b>""</b></html>"放在字符串周围。你是认真的,这似乎是一个黑客。将来我们也可能想要更改JList中项目的背景颜色 - HTML标签也可以吗?

我看到的另一个建议是使用您自己的实现setCellRenderer()接口的对象调用JList上的ListCellRenderer方法。但我不确定能做到我们想要的。似乎ListCellRenderergetListCellRendererComponent()方法,您可以在其中设置项目的显示方式,具体取决于项目是选中还是具有焦点。但是我们希望JList中的一个项目是粗体,具体取决于我们的业务逻辑确定的内容,它可能是既未被选中也没有焦点的项目。我没有看到这个ListCellRenderer的任何好例子,所以我不确定这是否是我们想要的方法。

1 个答案:

答案 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;
    }
}