首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改JTable单元格ForeGround颜色

更改JTable单元格ForeGround颜色
EN

Stack Overflow用户
提问于 2020-02-17 14:49:27
回答 1查看 59关注 0票数 0

我正在尝试更改JTable单元格的颜色(前景)。它可以工作,但它显示的是cell+1,而不是所需的单元格(如您在我的代码中所见)。

我试图更改当前行和列3的颜色,但实际上它正在更改下一列的颜色。

此代码将添加到自定义代码中。

代码语言:javascript
运行
复制
BaritemsTable = new javax.swing.JTable(){
@Override
public Component prepareRenderer (TableCellRenderer renderer, int rowIndex , int columnIndex ){
    Component component = super.prepareRenderer(renderer , rowIndex , columnIndex );
    Object value = getModel().getValueAt(rowIndex , columnIndex);

    if (columnIndex == 3){

        if (value.equals("Ready")){
            BaritemsTable.setForeground(new java.awt.Color(51, 204, 0));
            BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
        }
        if (value.equals("Process")){
            BaritemsTable.setForeground(new java.awt.Color(51, 51, 255));
            BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
        }
        if (value.equals("Queued")){
            BaritemsTable.setForeground(new java.awt.Color(255, 0, 0));
            BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
        }

    } else {
        BaritemsTable.setForeground(new java.awt.Color(0, 0, 0));
        BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
    }
    return component;
  }
};
EN

回答 1

Stack Overflow用户

发布于 2020-02-17 15:50:35

你代码中的第一个问题,肯定是:

代码语言:javascript
运行
复制
Object value = getModel().getValueAt(rowIndex , columnIndex);

您在JTable中的处理程序和侦听器、方法等中接收到的索引是视图索引,并且只能用于索引视图。换句话说,你应该写:

代码语言:javascript
运行
复制
Object value = getValueAt(rowIndex , columnIndex); // Use JTable.getValueAt

第二个问题:在prepareRenderer中直接引用列索引时,应该在该位置使用视图索引。你很可能需要

代码语言:javascript
运行
复制
if (convertColumnIndexToModel(columnIndex) == 3)

JTable.convertColumnIndexToModel确保您使用的是模型中的索引。为什么需要所有这些,什么是视图索引和模型索引?它们之间是如何关联的?我给了更多的解释,here

第三个问题:如果要设置行/单元格的颜色和字体,则需要在从super.prepareRenderer返回的组件上设置它们,而不是在表上设置。例如:

代码语言:javascript
运行
复制
if (value.equals("Ready")){
    component.setForeground(new java.awt.Color(51, 204, 0));
    component.setFont(new Font("Tahoma", Font.PLAIN, 48));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60257213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档