更改JTable中特定行的颜色

我正在寻找如何更改我的JTable中某些行的颜色,这些行在一个名为Notfoundrow的整数向量中有索引,但是我得到的问题是表中的所有行都将颜色变为红色!!

这是我的代码:

 package essai_trafficclass; import java.awt.Color; import java.awt.Component; import java.util.ArrayList; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class MonCellRenderer extends DefaultTableCellRenderer { public static ArrayList Notfoundrow1 = OneWayRelation.Notfoundrow; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); int L = 0; while (L < Notfoundrow1.size()) { System.out.println("la valeur du vecteur " + Notfoundrow1.get(L)); if (row == Notfoundrow1.get(L) && column == 1) { cell.setBackground(Color.RED); } else if (row == Notfoundrow1.get(L) && column == 1) { cell.setBackground(Color.RED); } else { cell.setBackground(Color.WHITE); } L++; } return cell; } } 

然后我叫这个课:

 tableM.setDefaultRenderer(Object.class, new MonCellRenderer()); 

tableM是我想要改变其行的颜色的表。

感谢您的任何帮助。

你可以大大简化你的逻辑……

而不是你的while循环,利用API的可用function……

 if (column == 1 || Notfoundrow1.contains(row)) { setBackground(Color.RED); } else { setBackground(Color.WHITE); } 

在此处输入图像描述

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; public class TestCellRenderer02 { public static void main(String[] args) { new TestCellRenderer02(); } private List notFound = new ArrayList<>(25); public TestCellRenderer02() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Random rand = new Random(System.currentTimeMillis()); DefaultTableModel model = new DefaultTableModel(new Object[]{"A", "B"}, 0); for (int index = 0; index < 100; index++) { model.addRow(new Object[]{index, index}); if (rand.nextBoolean()) { notFound.add(index); System.out.println("Not found @ " + index); } } JTable table = new JTable(model); table.setDefaultRenderer(Object.class, new MonCellRenderer()); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class MonCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (column == 1 || notFound.contains(row)) { setBackground(Color.RED); } else { setBackground(Color.WHITE); } return this; } } } 

ps-您可能还想阅读Java编程语言的代码约定