更改我的 JTable 中特定行的颜色
Posted
技术标签:
【中文标题】更改我的 JTable 中特定行的颜色【英文标题】:Change the color of specific rows in my JTable 【发布时间】:2013-05-22 06:00:14 【问题描述】:我正在寻找如何更改我的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<Integer> 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
是我想要更改颜色的表(如果它的行)。
感谢您的帮助。
【问题讨论】:
初步想法,前两个if
语句是一回事。更改单元格颜色后,是否真的需要在获得肯定匹配后继续检查ArrayList
?
这个answer 也可以帮助你。
【参考方案1】:
你可以大大简化你的逻辑......
而不是您的 while
循环,利用 API 的可用功能...
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<Integer> 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-您可能还想阅读Code Conventions for the Java Programming Language
【讨论】:
感谢 MadProgrammer,它有效 我喜欢这些 cmets。 “就像我们会给出一个完全可执行的代码,但它不起作用”。 +1! :-)以上是关于更改我的 JTable 中特定行的颜色的主要内容,如果未能解决你的问题,请参考以下文章