Java 在一列中勾选复选框后,如何动态更改JTable中的行背景色?

Java 在一列中勾选复选框后,如何动态更改JTable中的行背景色?,java,swing,colors,jtable,jcheckbox,Java,Swing,Colors,Jtable,Jcheckbox,我试图在JTable中呈现一些数据。我已经创建了Jtable,除了更改某些特定行的背景色之外,所有内容都是清晰的,在这些行中,用户在最后一列上勾选一个复选框。它必须动态工作。你能给我一些提示、密码等吗 像这样的 import java.awt.BorderLayout; import java.util.Vector; import javax.swing.*; import java.awt.*; import javax.swing.event.TableModelListener; imp

我试图在JTable中呈现一些数据。我已经创建了Jtable,除了更改某些特定行的背景色之外,所有内容都是清晰的,在这些行中,用户在最后一列上勾选一个复选框。它必须动态工作。你能给我一些提示、密码等吗

像这样的

import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;

public class JTableTest extends JFrame implements TableModel{

    Vector<Object[]> lines = new Vector<Object[]>();
    private String[] headers = {"String","Boolean"};

    public JTableTest(){
        for (int t = 0; t < 100; t++) lines.addElement(new Object[]{"Row "+t,Boolean.FALSE});
        JPanel p = (JPanel)getContentPane();
        p.setLayout(new BorderLayout());
        JTable table = new JTable();
        table.setDefaultRenderer(String.class, new MyRenderer());
        p.add(new JScrollPane(table));
        table.setModel(this);
        p.setPreferredSize(new Dimension(400,200));
        pack();
        setVisible(true);
    }
    public static void main(String[] args){
        new JTableTest();
    }
    @Override
    public int getRowCount() {
        return lines.size()+1;
    }
    @Override
    public int getColumnCount() {
        return headers.length;
    }
    @Override
    public String getColumnName(int columnIndex) {
        return headers[columnIndex];
    }
    @Override
    public Class<?> getColumnClass(int col) {
        if (col == 1) return Boolean.class;
        return String.class;
    }
    @Override
    public boolean isCellEditable(int row, int col) {
        return col==1;
    }
    @Override
    public Object getValueAt(int row, int col) {
        return lines.elementAt(row)[col];
    }
    @Override
    public void setValueAt(Object aValue, int row, int col) {
        lines.elementAt(row)[col] = aValue;
    }
    @Override
    public void addTableModelListener(TableModelListener l) {
    }
    @Override
    public void removeTableModelListener(TableModelListener l) {
    }
    private class MyRenderer extends DefaultTableCellRenderer{
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
            Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (lines.elementAt(row)[1] == Boolean.TRUE) c.setBackground(Color.orange);
            else c.setBackground(table.getBackground());
            table.repaint();
            return c;
        }
    }
}
导入java.awt.BorderLayout;
导入java.util.Vector;
导入javax.swing.*;
导入java.awt.*;
导入javax.swing.event.TableModelListener;
导入javax.swing.table.*;
public类JTableTest扩展JFrame实现表模型{
向量线=新向量();
私有字符串[]头={“字符串”,“布尔值”};
公共JTableTest(){
对于(int t=0;t<100;t++)行。addElement(新对象[]{“Row”+t,Boolean.FALSE});
JPanel p=(JPanel)getContentPane();
p、 setLayout(新的BorderLayout());
JTable table=新的JTable();
table.setDefaultRenderer(String.class,新的MyRenderer());
p、 添加(新JScrollPane(表));
表.setModel(本);
p、 setPreferredSize(新尺寸(400200));
包装();
setVisible(真);
}
公共静态void main(字符串[]args){
新JTableTest();
}
@凌驾
public int getRowCount(){
返回行。大小()+1;
}
@凌驾
public int getColumnCount(){
返回页眉长度;
}
@凌驾
公共字符串getColumnName(int columnIndex){
返回标题[列索引];
}
@凌驾
公共类getColumnClass(int-col){
如果(col==1)返回Boolean.class;
返回字符串.class;
}
@凌驾
公共布尔值可编辑(int行,int列){
返回col==1;
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回行。元素(行)[col];
}
@凌驾
public void setValueAt(对象有效、整行、整列){
行.elementAt(row)[col]=aValue;
}
@凌驾
公共void addTableModelListener(TableModelListener l){
}
@凌驾
公共void removeTableModelListener(TableModelListener l){
}
私有类MyRenderer扩展了DefaultTableCellRenderer{
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
Component c=super.getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
if(lines.elementAt(row)[1]==Boolean.TRUE)c.setBackground(Color.orange);
else c.setBackground(table.getBackground());
表1.repaint();
返回c;
}
}
}

阅读有关TbelCellRenderer的信息,并使用所述逻辑实现您自己的功能,这可能会对您有所帮助。。