【问题标题】:Multiple Strings colored in different way into the same cell of a JTable以不同方式着色的多个字符串到 JTable 的同一单元格中
【发布时间】:2010-10-25 21:19:30
【问题描述】:

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

我覆盖了DefaultTableCellRenderergetTableCellRendererComponent,但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);

}

【问题讨论】:

    标签: java swing colors jtable


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      Most swing components allow you to use HTML, this is not only limited to tables.

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

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

      【讨论】:

      • 表格中的 HTML 组件很快就会变得非常缓慢。您可以缓存组件,但除了某些特殊情况外,这会变得很棘手。
      • 但是,另一种方法是编写自己的 JComponent,速度很快。但很难做到正确
      猜你喜欢
      • 2016-12-08
      • 2017-09-11
      • 2013-03-14
      • 1970-01-01
      • 2013-02-18
      • 2013-04-09
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      相关资源
      最近更新 更多