Variablenübergabe an MyTableCellRenderer

Status
Nicht offen für weitere Antworten.
G

Giftstachel.

Gast
also ich brems mich glaub ich grade mal wieder selber aus, und bin dringend auf eure hilfe angewiesen.
ich weiß auch, das die frage vermutlich wieder mal sau dämlich ist, aber ich komm einfach nicht drauf^^

ich habe einen TableCellRenderer, und an diesen möchte ich aus meinem main eine steuervariable übergeben.

das genze wird im klassischen sinne so aufgerufen.

Code:
table.setDefaultRenderer(Object.class, new MyTableCellRenderer());

der renderer:

Code:
package ausleser;

import java.awt.Color;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;


public class MyTableCellRenderer extends DefaultTableCellRenderer
{
	
	
    /**
	 * 
	 */
	private static final long serialVersionUID = -1143433302731696132L;

	public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row,int column) 
    {
    	
    super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);

  try {  
    if (table.getValueAt(0, 1).equals(0)){
    	if (row%7 == 1) {
    	       if (isSelected) setBackground(java.awt.Color.lightGray);
    	       else setBackground(java.awt.Color.lightGray);
    	    } 
    	    
    	    else 
    	    {
    	       setBackground(table.getBackground());
    	    }
    }
    if (table.getValueAt(0, 1).equals(1)){
    	if (row%5 == 1) {
    	       if (isSelected) setBackground(java.awt.Color.lightGray);
    	       else setBackground(java.awt.Color.lightGray);
    	    } 
    	    
    	    else 
    	    {
    	       setBackground(table.getBackground());
    	    }
    }
    
    
    else 
    {
       setBackground(table.getBackground());
    }
  }
  catch (NullPointerException nullpe){System.out.println("nullpe nullpe!!!");}
   
  
  try 
    {
(table.getColumnModel().getColumn(7).equals("7"));

    	setBorder( new MyCellBorder( Color.black, 0, 1, 0, 0 ) );
 
    }
    catch (NullPointerException e)
    {}
    catch (ArrayIndexOutOfBoundsException aioobex)
    {}

    setToolTipText ("" + table.getValueAt(row, 0) + "" ); //+ toolTipDaten.toolTipResults().equals(table.getValueAt(row, column)));
    return this;                  	
 }
}

also derzeit löse ich das über die übergabe von der steuervariablen in die table, und lese das von da wieder aus, was ich allerdings nicht grade gelungen finde...

die lösung
Code:
table.setDefaultRenderer(Object.class, new MyTableCellRenderer(MEINESTEUERVARIABLE));

geht leider nicht.. zumindest nicht in dieder form..

danke euch für die hilfe
 

Marco13

Top Contributor
Code:
class SomeClass
{
    private MyTableCellRenderer renderer = new MyTableCellRenderer();

    void foo()
    {
        table.setDefaultRenderer(Object.class, renderer);
    }

    void bar()
    {
        renderer.setSomeVariable("Hello");
    }
}
!?
 

Giftstachel

Bekanntes Mitglied
klappt das auch bei einem default tablecellrenderer? oô
ich bekomms grade nicht gebacken.

geht doch an sich dann mit

Code:
renderer.setText("Hallo")

und dann im renderer mit
Code:
this.getText()

oder?
 

KSG9|sebastian

Top Contributor
muss halt so aussehen:

Code:
public class MyCellRenderer extends DefaultCellRenderer{
    private String text;

    public void setText(String t){
       this.text = t;
    }
    public String getText(){
       return text;
    }

    // CellRenderer-spezfisicher Code
}
 

Marco13

Top Contributor
Eigentlich sollte es reichen, wenn der renderer intern als DefaultTableCellRenderer bekannt ist
Code:
class SomeClass
{
    private DefaultTableCellRenderer renderer = ...

    void foo()
    {  
        renderer.setText("...");
    }
}
weil DefaultTableCellRenderer von JLabel erbt.
 

Giftstachel

Bekanntes Mitglied
ja, ähm.. nein.. ich glaub, wir kommen vom thema ab

in meine tablecellrenderer brauche ich die variable, die ich aus der main im gui über eine JComboBox mitgebe. der renderer ist eine eigene class (extends defaultTableCellRenderer)

d.h.
hier möchte ich diese dann mit hilfe von

Code:
if (table.getValueAt(0, 1).equals(0)){
       if (row%7 == 1) {
              if (isSelected) setBackground(java.awt.Color.lightGray);
              else setBackground(java.awt.Color.lightGray);
           }
          
           else
           {
              setBackground(table.getBackground());
           }
    }
    if (table.getValueAt(0, 1).equals(1)){
       if (row%5 == 1) {
              if (isSelected) setBackground(java.awt.Color.lightGray);
              else setBackground(java.awt.Color.lightGray);
           }
          
           else
           {
              setBackground(table.getBackground());
           }
    }

abfragen.
 

Marco13

Top Contributor
Das stammt wohl aus der get....RenderComponent-Methode.... Und WO soll dort nun eine Variable verwendet werden, die WO herkommen soll, und WAS macht?
 

Giftstachel

Bekanntes Mitglied
die variable wird mit hilfe einer JComboBox in meinem public void createAndShowGUI() vom user gesetzt.

Code:
JComboBox combobox= new JComboBox(tageOderPunkte);
		combobox.addItemListener( new ItemListener() 
		{
		      public void itemStateChanged( ItemEvent e ) 
		      {
		        JComboBox selectedChoice = (JComboBox)e.getSource();
		        if ( selectedChoice.getSelectedItem().equals("In Punkten Berechnen") )
		        	tageOderPunkteBerechnen = 1;
		        if ( selectedChoice.getSelectedItem().equals("Berechnung für die nächsten 15 Tage") )
		        	tageOderPunkteBerechnen = 2;
		      }
		 });

dann soll der tablecellrenderer aufgerufen werden
Code:
     table.setDefaultRenderer(Object.class, new MyTableCellRenderer());

und im renderer soll dann eben bei punkten in jeder 7ten zeile ein balken gemacht werden, und bei tagen in jeder 5ten :)

Code:
public class MyTableCellRenderer extends DefaultTableCellRenderer{

mache hier die 5 oder die 7

}
 

Marco13

Top Contributor
OK... noch ein Versuch:
Code:
public class MyTableCellRenderer extends DefaultTableCellRenderer
{
    public void setMode(int mode) { .... } // setze 1 oder 2 für Tage oder Punkte
}


class GUI
{
    private MyTableCellRenderer  renderer = new MyTableCellRenderer();

    public void createAndShowGUI()
    {
        JComboBox combobox= new JComboBox(tageOderPunkte);
		combobox.addItemListener( new ItemListener() 
		{
		      public void itemStateChanged( ItemEvent e ) 
		      {
		        JComboBox selectedChoice = (JComboBox)e.getSource();
		        if ( selectedChoice.getSelectedItem().equals("In Punkten Berechnen") )
                                renderer.setMode(1);
		        	//tageOderPunkteBerechnen = 1;
		        if ( selectedChoice.getSelectedItem().equals("Berechnung für die nächsten 15 Tage") )
		        	//tageOderPunkteBerechnen = 2;
                                renderer.setMode(2);
		      }
		 });

         table.setDefaultRenderer(Object.class, renderer);
    }


....

So vielleicht?
 

Giftstachel

Bekanntes Mitglied
ja, mensch... natürlich :)
ist ja irgendwie naheliegend, wenn man drauf kommt.

besten dank :)

hatt nur bisher diese möglichkeit geistig nicht in betracht gezogen.

meine lösung war ja

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


blablabla
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben