Java 多个字符串以不同的方式着色到JTable的同一单元格中

Java 多个字符串以不同的方式着色到JTable的同一单元格中,java,swing,colors,jtable,Java,Swing,Colors,Jtable,假设您有一个JTable,对于每个单元格,您希望显示三个不同颜色的字符串,例如value1(红色)、value2(蓝色)、value3(绿色) 我重写了DefaultTableCellRenderer的getTableCellRendererComponent,但是setForeground(Color)方法为单元格中显示的所有字符串提供了唯一的颜色 @Override public Component getTableCellRendererComponent(JTable table, Ob

假设您有一个
JTable
,对于每个单元格,您希望显示三个不同颜色的字符串,例如value1(红色)、value2(蓝色)、value3(绿色)

我重写了
DefaultTableCellRenderer
getTableCellRendererComponent
,但是
setForeground(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);

}

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

 <html><font color="blue">A String</font><font color="red">Another String</font></html>
一个字符串另一个字符串
并将其设置为单元格,您不必担心渲染器

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


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

JIDE提供了一个样式标签作为其开源公共层的一部分,这正是你想要的,比自己实现任何东西都简单10倍


表中的HTML组件速度非常慢,速度非常快。您可以缓存组件,但除了某些特殊情况外,这在任何情况下都会变得棘手。不过,另一种方法是编写自己的JComponent,速度很快。但要把它做好很难