我有 jTable1 有 2 列。我想控制第 1 列的外观,因此我使用以下代码根据单元格行是偶数还是奇数来将单元格中的文本字体设置为粗体或不粗体。

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
        boolean isSelected, boolean hasFocus, int row, int column) {
    Component cell = super.getTableCellRendererComponent(
        table, obj, isSelected, hasFocus, row, column );
        if (row % 2 == 0){
            cell.setFont(getFont().deriveFont(Font.BOLD));
        }
        return cell;
    }
}

我用以下方式称呼它:

jTable1.getColumnModel().getColumn(1).setCellRenderer(new 
CustomTableCellRenderer());

我想要的是修改这个 TableCellRenderer 这样单元格背景将根据同一行上的其他列(第 0 列)值绘制。例如,如果第 5 行第 0 列的值是“书”,则第 1 行第 1 行的单元格将为红色,如果第 0 列的值为“报纸”,则第 1 列的颜色为绿色。我的问题是我不知道如何将column0 值传递给column1 渲染器,以便它将用于更改颜色。

有帮助吗?

解决方案 3

我发现如何访问另一列数据:

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
    boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
    table, obj, isSelected, hasFocus, row, column );

    //I USE THIS TO ACCESS THE DATA FROM ANOTHER CELL!!!
    TableModel model = table.getModel();
    String media= (String) model.getValueAt(row, 0)


    if (row % 2 == 0){
        cell.setFont(getFont().deriveFont(Font.BOLD));
    }


   //SO I GET THE RESULT I WANT
   if ("book".equals(media)){
     cell.setBackground(Color.red)  
   }
   else{
     cell.setBackground(Color.green)
   }  



    return cell;
}
}
.

其他提示

检查签名 .getTableCellRendererComponent(...) 方法:您将获得对 JTable 的引用(您可以从中获取 TableModel)以及当前行和列的索引。

使用它们,您可以查找所需的任何相对值。

如图所示在这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top