2

我有一个 JList 包含类 Operation 的实例,其中包含一个布尔标志“启用”。当此标志设置为 false 时,我希望 JList 中 Operation 实例的文本表示具有 TextAttribute.STRIKETHROUGH_ON 设置。

为此,我实现了一个扩展 DefaultListCellRenderer 的自定义 ListCellRenderer:

package com.pumdashboard.ui.configurator;

import java.awt.Component;
import java.awt.font.TextAttribute;
import java.util.HashMap;
import java.util.Map;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;

import com.pumdashboard.data.Operation;

@SuppressWarnings ("serial")
public class OperationsListCellRenderer extends DefaultListCellRenderer {

    @SuppressWarnings ("rawtypes")
    @Override
    public Component getListCellRendererComponent (final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) {

        final JLabel cmpnnt = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        if (value == null) {
            return cmpnnt;
        }

        final Operation op = (Operation) value;

        if (!op.get_enabled()) {
            final Map<TextAttribute, Object> attr = new HashMap<TextAttribute, Object>(list.getFont().getAttributes());
            attr.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
            cmpnnt.setFont(list.getFont().deriveFont(attr));
        }

        return cmpnnt;
    }
}

此实现在运行 JDK 1.7 设置为 1.5 模式的 eclipse 4.2 中的 Windows 7 上运行良好。但是,当我尝试在带有 JRE 1.5 的 Solaris 10 上运行完全相同的代码时,没有出现删除线。

任何帮助将不胜感激。

4

0 回答 0