我有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列)值绘制单元格背景。
例如,如果column0,第5行的值为“book”,则为column1,第5行将为红色,如果column0值为“newspaper”,则column1颜色为绿色。
我的问题是我不知道如何将column0值传递给column1渲染器,因此它将用于更改颜色。
答案 0 :(得分:1)
检查.getTableCellRendererComponent(...)
方法的签名:您将获得对JTable的引用(您可以从中获取TableModel),以及当前行和列的索引。
使用那些你可以查找你想要的任何相对值。
答案 1 :(得分:1)
如图here所示,您可以覆盖prepareRenderer()
以影响整行。
答案 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 );
//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;
}
}