RendererProb in Jtable

Shizzl_chrizzl

Erfahrenes Mitglied
Hi leude

ich hab nur ein kleines Problem. Also es geht darum das ich nen Renderer habe. Nun hab ich da ne Bedingung eingebaut und je nachdem ob die Bedingung erfüllt ist färbt sich der Hintergrund in die entsprechende Farbe. Das funktioniert auch alles nur er färbt mir immer die ganze Tabelle ein und ich will eben das der nur die ausgewählte Zeile einfärbt.

Ich weis etz hat net wie ich des ändern soll hab scho etliche sachen probiert

Code:
    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 rows = parent.tblMeasurement.getSelectedRow();
           if (rows > -1)
           {
            OMeasurementRS30 t = 
(OMeasurementRS30)parent.MessungAuswahl.elementAt(rows);    
       
               if( t.sendStatus == -1 )
                {  
                cell.setBackground( Color.lightGray );
                }
                if( t.sendStatus == 1 )
                {  
                cell.setBackground( Color.white );
                }
                if( t.sendStatus == 0 )
                {  
                cell.setBackground( Color.green );
                }
           }
            return cell;
 }

    }

die Zeile in der mein objekt erzeugt wird hat nur hier einen Zeilenumbruch wegen der CodeDarstellung.
 
Hallo,
sorg dafür, dass wenn keine deiner Bedingungen erfüllt wird, die entsprechende Komponente mit den Standardfarben gezeichnet wird, etwa so:

else
{
cell.setBackground( Color.white );
cell.setForeground(Color.black);
}
Dein Problem liegt nämlich darin, dass jede Komponente mit der zuletzt verwendeten Farbe gezeichnet wird.

CU
Crai
 
Außerdem scheint mir dies hier

Code:
        Component cell = super.getTableCellRendererComponent
           (table, value, isSelected, hasFocus, row, column);

          int rows = parent.tblMeasurement.getSelectedRow();
           if (rows > -1)
           {

etwas suboptimal zu sein. Wofür ist das gut? Warum explizit super.getTableCellRendererComponent(...) aufrufen? Und ob eine Zelle selected ist, wird der Methode ja gleich mit übergeben.

:confused:
 
@ crai supi dank dir für den tip dann werd ich das mal probieren

@ snape , hab heute zum ersten mal mit nem table renderer gearbeitet und weis selber no net so genau wozu das gut is ;)
 
also ich habs jetzt hinbekommen das er mir nur die jeweilige spalte einfärbt mit "isSelected" , aber wie bekomm ich es hin, das nach dem die Spalte ausgewählt und die Farbe gestetzt wurde, das die Farbe auch bleibt und nicht wieder verschwindet sobald man in die nächste Zeile klickt.

Code:
  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);

            this.isSelected = isSelected;
		        this.hasFocus = hasFocus;

            int rows = parent.tblMeasurement.getSelectedRow();
             if (rows > -1)
              {
                OMeasurementRS30 t =
 (OMeasurementRS30)parent.MessungAuswahl.elementAt(rows);
            
                  if( isSelected && t.sendStatus == -1 )
                  {  
                  cell.setBackground( Color.lightGray );
                  }else
                  {
                  cell.setBackground(Color.white);
                  }
 
Shizzl_chrizzl hat gesagt.:
also ich habs jetzt hinbekommen das er mir nur die jeweilige spalte einfärbt mit "isSelected" , aber wie bekomm ich es hin, das nach dem die Spalte ausgewählt und die Farbe gestetzt wurde, das die Farbe auch bleibt und nicht wieder verschwindet sobald man in die nächste Zeile klickt.

Na da wirst Du Dir wohl für jede Spalte die Farbe merken müssen im Renderer.

Code:
  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);

            this.isSelected = isSelected;
		        this.hasFocus = hasFocus;

            int rows = parent.tblMeasurement.getSelectedRow();
             if (rows > -1)
              {
                OMeasurementRS30 t =
 (OMeasurementRS30)parent.MessungAuswahl.elementAt(rows);
            
                  if( isSelected && t.sendStatus == -1 )
                  {  
                  cell.setBackground( Color.lightGray );
                  }else
                  {
                  cell.setBackground(Color.white);
                  }

Das macht mich ganz krank. ;)
Äder das mal um in

Code:
  public Component getTableCellRendererComponent
       (JTable table, Object value, boolean isSelected,
       boolean hasFocus, int row, int column) 
    {
            this.isSelected = isSelected;
            this.hasFocus = hasFocus;

            int rows = parent.tblMeasurement.getSelectedRow();
             if (rows > -1)
              {
                OMeasurementRS30 t =
 (OMeasurementRS30)parent.MessungAuswahl.elementAt(rows);
            
                  if( isSelected && t.sendStatus == -1 )
                  {  
                   setBackground( Color.lightGray );
                  }else
                  {
                   setBackground(Color.white);
                  }

Der Aufruf von super.getTableCellRendererComponent(...) ist wirklich nicht nötig.
 
ok das änder ich gleich um , will doch nicht so kurz vorm we deine Nerven strapazieren in dem ich dir kranke source codes vorleg :).

Aber mal zum abspeichern. Wo speicher ich das ab Muss ich da was im table Model aufrufen :suspekt:
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück