首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java表CustomTableCellRenderer根据单元格内容值更改行颜色

问java表CustomTableCellRenderer根据单元格内容值更改行颜色
EN

Stack Overflow用户
提问于 2013-11-30 18:12:13
回答 2查看 1.2K关注 0票数 0

我正在开发的java应用程序.i想要在一个表中显示数据,该表具有3列名、过程和年份.i,根据internet.this代码上的一个教程,使用tablerenderer实际上所做的是根据行号..but用青色和灰色对行进行着色,只有当年份列(年份的值)等于某一值时,才将青色设置为行,让我们假设3.如果第3行的列值等于5,那么第3行的颜色应该是蓝色的,否则它应该是灰色的。这是我在互联网..so上找到的代码,我如何修改它以实现我的目标??

代码语言:javascript
复制
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;
  }
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-30 19:09:29

您可以像在CustomTableCellRenderer类中那样简单地这样做。

代码语言:javascript
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-30 18:25:42

但是,只有当年份列(年份的值)等于某一值时,我才想将青色设置为行。

不要使用单独的渲染器。相反,您可以使用在表行绘制中找到的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20303829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档