Java 更改我的JTable中特定行的颜色

Java 更改我的JTable中特定行的颜色,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我正在寻找如何更改我的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.Defaul

我正在寻找如何更改我的
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
是我想要更改其行颜色的表


谢谢您的帮助。

您可以大大简化您的逻辑

而不是您的
while
循环,利用API的可用功能

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

导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.table.DefaultTableCellRenderer;
导入javax.swing.table.DefaultTableModel;
公共类TestCellRender02{
公共静态void main(字符串[]args){
新的TestCellRender02();
}
private List notFound=新的ArrayList(25);
公共TestCellRender02(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
Random rand=新的Random(System.currentTimeMillis());
DefaultTableModel=new DefaultTableModel(新对象[]{“A”,“B”},0);
对于(int-index=0;index<100;index++){
addRow(新对象[]{index,index});
if(rand.nextBoolean()){
未找到。添加(索引);
System.out.println(“未找到@”+索引);
}
}
JTable table=新的JTable(模型);
setDefaultRenderer(Object.class,新的MonCellRenderer());
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(新的JScrollPane(表));
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类MonCellRenderer扩展了DefaultTableCellRenderer{
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
super.getTableCellRenderComponent(表、值、,
isSelected、hasFocus、row、column);
如果(列==1 | |未找到。包含(行)){
挫折地面(颜色:红色);
}否则{
挫折地面(颜色:白色);
}
归还这个;
}
}
}

ps-您可能还想通读一下

您可以大大简化您的逻辑

而不是您的
while
循环,利用API的可用功能

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

导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.table.DefaultTableCellRenderer;
导入javax.swing.table.DefaultTableModel;
公共类TestCellRender02{
公共静态void main(字符串[]args){
新的TestCellRender02();
}
private List notFound=新的ArrayList(25);
公共TestCellRender02(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
Random rand=新的Random(System.currentTimeMillis());
DefaultTableModel=new DefaultTableModel(新对象[]{“A”,“B”},0);
对于(int-index=0;index<100;index++){
addRow(新对象[]{index,index});
if(rand.nextBoolean()){
未找到。添加(索引);
System.out.println(“未找到@”+索引);
}
}
JTable table=新的JTable(模型);
setDefaultRenderer(Object.class,新的MonCellRenderer());
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(新的JScrollPane(表));
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类MonCellRenderer扩展了DefaultTableCellRenderer{
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
super.getTableCellRenderComponent(表、值、,
isSelected、hasFocus、row、column);
如果(列==1 | |未找到。包含(行)){
挫折地面(颜色:红色);
}否则{
挫折地面(颜色:白色);
}
ret
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;
        }
    }
}