Вопрос

У меня есть 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) в той же строке.Например, если значение в столбце 0, строка 5 — «книга», то столбец 1, ячейка строки 5 будет красным, а если значение столбца 0 — «газета», то цвет столбца 1 — зеленый.Моя проблема в том, что я не знаю, как передать значение столбца0 в средство визуализации столбца1, поэтому оно будет использоваться для изменения цветов.

Это было полезно?

Решение 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) и индекс текущей строки и столбца.

Используя их, вы можете найти любое относительное значение, которое захотите.

Как показано здесь, вы можете переопределить prepareRenderer() чтобы повлиять на целые строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top