有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing java table CustomTableCellRenderer根据单元格内容值更改行颜色

我正在开发java应用程序。我想在一个表中显示数据,该表有3个列名course和year。我根据在互联网上找到的教程使用tablerenderer。这段代码实际上是根据行号用青色和灰色给行着色。。但我只想在year列(year的值)等于某个值(比如3)时,将青色设置为row。这意味着,如果第三行年份列值等于5,则第三行颜色应为青色,否则应为灰色。这是我在网上找到的代码。。那么我该如何为我的目标修改它呢

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;


public class CustomCellRenderer{
  JTable table;
  TableColumn tcol;
  public static void main(String[] args) {
  new CustomCellRenderer();
  }

  public CustomCellRenderer(){
  JFrame frame = new JFrame("Creating a Custom Cell Reanderer!");
  JPanel panel = new JPanel();
  String data[][] = {{"Vinod","Computer","3"},
   {"Rahul","History","2"},
   {"Manoj","Biology","5"},
   {"Sanjay","PSD","6"}};
  String col [] = {"Name","Course","Year"};
  DefaultTableModel model = new DefaultTableModel(data,col);
  table = new JTable(model);
  tcol = table.getColumnModel().getColumn(0);
  tcol.setCellRenderer((TableCellRenderer) new CustomTableCellRenderer());
  tcol = table.getColumnModel().getColumn(1);
  tcol.setCellRenderer((TableCellRenderer) new CustomTableCellRenderer());
  tcol = table.getColumnModel().getColumn(2);
  tcol.setCellRenderer((TableCellRenderer) new CustomTableCellRenderer());
  JTableHeader header = table.getTableHeader();
  header.setBackground(Color.yellow);
  JScrollPane pane = new JScrollPane(table);
  panel.add(pane);
  frame.add(panel);
  frame.setSize(500,150);
  frame.setUndecorated(true);
  frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
  }

  public class CustomTableCellRenderer extends DefaultTableCellRenderer{
  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 (isSelected) {
  cell.setBackground(Color.green);
  } 
  else {
  if (row % 2 == 0 ) {
  cell.setBackground(Color.cyan);
  }
  else {
  cell.setBackground(Color.lightGray);
  }
  }
  return cell;
  }
  }
}

共 (2) 个答案

  1. # 1 楼答案

    but i want to set cyan color to row only if year column (value of year) equals to certain value

    不要使用单个渲染器。相反,您可以使用Table Row Rendering中的方法

  2. # 2 楼答案

    您可以像在CustomTableCellRenderer类中一样简单地执行此操作

    TableModel model = table.getModel();
    String colYear = model.getColumnName(2);
    int colYearValue = Integer.valueOf((String) model.getValueAt(row, 2));
    
    if (colYearValue == 3) {
        cell.setBackground(Color.cyan);
    } else {
        cell.setBackground(Color.lightGray);
    }