Java 条件jtable背景行

Java 条件jtable背景行,java,jtable,Java,Jtable,嗨,我有一个问题,我有一个表中的人物列表,也有一个向量中的坏人列表,我想加载jtable,穷人用红色标记 tabla=表格 conteo=计数 我所拥有的代码的问题是,尽管有几个匹配品牌,但只有一个匹配品牌 tabla.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Obj

嗨,我有一个问题,我有一个表中的人物列表,也有一个向量中的坏人列表,我想加载jtable,穷人用红色标记 tabla=表格 conteo=计数

我所拥有的代码的问题是,尽管有几个匹配品牌,但只有一个匹配品牌

tabla.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
    try {
        String sql;
        String driver = "org.apache.derby.jdbc.EmbeddedDriver";
        String bdd = "616c756d6e6f";
        String par = "create=true"; 
        String conexion = "jdbc:derby:" + bdd + ";" + par;
        Connection con = DriverManager.getConnection(conexion);
        sql="select matricula from bajas";
        PreparedStatement st = con.prepareStatement(sql);
        ResultSet rs= st.executeQuery();
        Vector<String> vec = new Vector<String>();
        while(rs.next())
        {
            vec.addElement(rs.getString("matricula"));
        }
        con.close();


        for(int x=0;x<tabla.getRowCount();x++)
        {
            int conteo=0;
            for(String valor:vec)
            {
                if(valor.equals(tabla.getValueAt(x, 0)))
                {
                    conteo++;
                }
            }
            if(conteo!=0)
            {
                final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

              c.setBackground(row ==x ? Color.RED:null);
             return c;
            }
        }


    } catch (SQLException ex) {
        Logger.getLogger(InicioAlumnos.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}
tabla.setDefaultRenderer(Object.class,新的DefaultTableCellRenderer())
{
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列)
{
试一试{
字符串sql;
String driver=“org.apache.derby.jdbc.EmbeddedDriver”;
字符串bdd=“616c756d6e6f”;
字符串PAR= =“创建=真”;
String CONEXION =“JDBC:DeBe:++BDD+”;“+PAR”;
Connection con=DriverManager.getConnection(conexion);
sql=“从bajas中选择matricula”;
PreparedStatement st=con.prepareStatement(sql);
结果集rs=st.executeQuery();
向量向量=新向量();
while(rs.next())
{
矢量加法器(rs.getString(“matricula”);
}
con.close();
对于(int x=0;x
  • 不要在渲染器中执行任何可能耗时的操作(对于GUI来说,这是一个非常好的规则)。渲染器负责的每个单元格都可以调用此渲染器(有1000行,预计命中1000次)。相反,请预加载“黑色”列出并使用缓存的值。如果需要,请提供重新加载列表的方法
  • 始终从单元渲染器返回值,否则可能会导致其他问题
  • 这个

    for(int x=0;x<tabla.getRowCount();x++)
    {
        int conteo=0;
        for(String valor:vec)
        {
            if(valor.equals(tabla.getValueAt(x, 0)))
            {
                conteo++;
            }
        }
    
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);   
    if (vec.contains(table.getValueAt(row, 0)) {
        setBackground(Color.RED);
    }
    return this;