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

pac*_*low 4 java swing jlist

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

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

How*_*ard 6

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)