【问题标题】:java table CustomTableCellRenderer change row color according to cell content valuejava table CustomTableCellRenderer根据单元格内容值更改行颜色
【发布时间】:2013-12-16 17:12:16
【问题描述】:

我正在开发 Java 应用程序。我想在具有 3 列名称课程和年份的表中显示数据。我根据互联网上的教程使用 tablerenderer。此代码实际上是根据青色和灰色对行进行着色到行号..但我只想在年列(年份的值)等于某个值时才将青色设置为行,比如说 3.这意味着如果第 3 行年列值等于 5,那么第 3 行颜色应该是青色,否则它应该灰色的。这是我在互联网上找到的代码..那么我该如何修改它以实现我的目标??

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;
  }
  }
}

【问题讨论】:

  • 给定行号,您需要做的就是从模型中读取给定行号的“年份”列中的内容。
  • 本网站不是为了帮助不懂编程的人修改他们在互联网上找到的代码。
  • 我可以修改很多代码,但只会和这个混淆

标签: java swing colors jtable tablecellrenderer


【解决方案1】:

但我只想在年份列(年份值)等于某个值时将青色设置为行

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

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2018-08-15
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多