2013-10-05 31 views
0

我有一个真正的大问题,它非常大,因为我到处搜索,但我找不到解决方案。为某个行着色并仍然可以在其后选择其他行?

我想将整行着色为黄色。 Yellow Row表示客户已经付款。在那之后,我仍然需要能够选择行(他们选择的应该是蓝色,其他的是白色的)来做其他事情(更新,删除等)。但这一切都只是变得混乱起来,最后,我按下的每一行都变黄,我不明白为什么。我正在使用自定义tableCellRenderer。

如果该行已经付款或者没有付款,每次按下一行时是否需要证明?然后用黄色或蓝色着色?

teilnehmertable.setDefaultRenderer(Object.class, new MyTableCellRender(teilnehmertable.getSelectedRow())); 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:mysql://10.0.0.1:3306/askoedb", "name", "pw"); 
      stmt = con.createStatement(); 
      rs1 = stmt.executeQuery("SELECT bezahlt FROM askoedb.teilnehmer"); 
      while (rs1.next()) { 
       System.out.println(rs1.getString(1)); 
       if (rs1.getString(1) != null) { 
        if (selectedRow != -1) { 
         if (row == selectedRow) { 
          setForeground(Color.black); 
          setBackground(Color.yellow); 
         } else { 
          setForeground(Color.black); 
          setBackground(Color.white); 
         } 
        } 
        setText(value != null ? value.toString() : ""); 
       } else { 
        if (selectedRow != -1) { 
         if (row == selectedRow) { 
          setForeground(Color.white); 
          setBackground(Color.blue); 
         } else { 
          setForeground(Color.black); 
          setBackground(Color.white); 
         } 
        } 
       } 
      } 

      return this; 
     } catch (ClassNotFoundException | SQLException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } finally { 
      try { 
       con.close(); 
      } catch (SQLException ex) { 
       Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
     return this; 
    } 
+3

曼努埃尔你应该提供[SSCCE](http://www.sscce.org)。演示问题的有效代码。你有什么尝试。 – nachokk

+2

请提供您的Custom tableCellRenderer的代码,问题可能出在它的逻辑上。很可能黄永远应该是一些条件,如“布尔支付”,而不是基于选择/行位置。 – porfiriopartida

+1

JTable一次又一次地为每个单元格使用相同的单元格渲染器。我的猜测是,如果付费条件为true,您无法看到自己的代码是将背景设置为黄色,但是当您没有编写“else”块来将渲染器的颜色设置为JTable的默认背景时付费条件是错误的。 – VGR

回答

1

做的每一件我按到行,如果该行已支付或没有时间,我有证据吗?然后用黄色或蓝色着色?

是每行选择/取消选择时都会呈现该行。

查看Table Row Rendering的一种方法,允许您根据特定列中的值对整行进行着色。

相关问题