3

假设您有一个JTable并且要为每个单元格显示三个不同颜色的字符串,例如 value1(红色)、value2(蓝色)、value3(绿色)。

我覆盖了getTableCellRendererComponentof DefaultTableCellRendererbutsetForeground(Color)方法为单元格中显示的所有字符串提供了独特的颜色。

@Override
public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
    String s = table.getModel().getValueAt(row,column).toString();

    StringTokenizer st = new StringTokenizer(s," ");
    int nToken=st.countTokens();

    value1=st.nextToken();
    value2=st.nextToken();
    value3=st.nextToken();
    // so now all the values are blue...
    setForeground(Color.blue);

    return super.getTableCellRendererComponent(table, value, isSelected,
            hasFocus, row, column);

}
4

2 回答 2

3

JIDE 提供 StyledLabel 作为其开源公共层的一部分,这正是您想要的,而且比您自己实现任何东西要容易 10 倍。

https://jide-oss.dev.java.net/

替代文字

于 2009-05-13T17:17:40.060 回答
2

单元格表的默认渲染器是 JLabel。该组件支持 HTML 标签。您可以拥有的最简单的解决方案是使用 HTML 以不同的颜色呈现字符串。因此,您可以构建一个字符串,例如:

 <html><font color="blue">A String</font><font color="red">Another String</font></html>

并将其设置为单元格,您不必担心渲染器。

大多数 Swing 组件都允许您使用 HTML,这不仅限于表格。

另一种可能性是您创建一个从 JComponent 扩展的类,并编写paintComponent() 程序,以便它以不同的颜色绘制这三个字符串。然后您可以将此组件设置为渲染器。但这要复杂得多。因为渲染器像“印章”一样工作,所以它会在绘制单元格时印上正确的颜色。例如,如果您需要在单元格上绘制极其复杂和自定义的图形,这将非常有用。

如果您没有大量单元格,我会坚持使用 HTML。

于 2009-05-13T14:51:06.510 回答