2013-10-05 67 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的一種方法,允許您根據特定列中的值對整行進行着色。

相關問題