Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java表CustomTableCellRenderer根据单元格内容值更改行颜色_Java_Swing_Colors_Jtable_Tablecellrenderer - Fatal编程技术网

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

java表CustomTableCellRenderer根据单元格内容值更改行颜色,java,swing,colors,jtable,tablecellrenderer,Java,Swing,Colors,Jtable,Tablecellrenderer,我正在开发java应用程序。我想在一个有3列名称course和year的表中显示数据。我根据在internet上找到的教程使用tablerenderer。这段代码实际上是根据行号用青色和灰色给行着色。但我只想在year列(year的值)时将青色设置为row等于某个值,比如说3。这意味着如果第三行第二年的列值等于5,那么第三行的颜色应该是青色,否则应该是灰色。这是我在互联网上找到的代码。那么我该如何为我的目标修改它呢 import java.awt.Color; import java.awt.C

我正在开发java应用程序。我想在一个有3列名称course和year的表中显示数据。我根据在internet上找到的教程使用tablerenderer。这段代码实际上是根据行号用青色和灰色给行着色。但我只想在year列(year的值)时将青色设置为row等于某个值,比如说3。这意味着如果第三行第二年的列值等于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;
  }
  }
}
但我只想在year列(year的值)等于某个值时将青色设置为row


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

您可以像在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);
}

你得到了行号,你所需要做的就是从你的模型中读取给定行号的“年份”列中的内容。这个网站不是为了帮助不知道如何编程的人修改他们在互联网上找到的代码。我可以修改许多代码,但只是对此感到困惑