cell selection mit defaultcellrenderer

don27

Grünschnabel
hi zusammen,

mein problem ist folgendes. sobald ich meinen persönlichen cellrenderer aufrufe, der von defaultcellrenderer abgeleitet ist kann ich meine cellen nicht mehr selecten. Es ist so, dass ich verschiedene cellrenderer auf einzelne kolonnen anwende. Und nur dort wo ich keinen cellrenderer anwende kann ich noch selecten.

so wende ich den cellrenderer an:

Code:
jtable.getColumnModel().getColumn(0).setPreferredWidth(100);
		jtable.getColumnModel().getColumn(1).setPreferredWidth(250);
		jtable.getColumnModel().getColumn(1).setCellRenderer(new BrandCellRenderer());
		jtable.getColumnModel().getColumn(2).setPreferredWidth(20);
		jtable.getColumnModel().getColumn(2).setCellRenderer(new NumberFormatCellRenderer());		
		jtable.getColumnModel().getColumn(3).setPreferredWidth(20);
		jtable.getColumnModel().getColumn(3).setCellRenderer(new NumberFormatCellRenderer());


nur kolonne 0 ist noch selectable...


und das ist einer der cellrenderer:

Code:
public class BrandCellRenderer extends DefaultTableCellRenderer{
	/**
	 * 
	 */
	private static final long serialVersionUID = -1239007292932147601L;



	public BrandCellRenderer(){
		setOpaque(true);
		setBackground(Color.white);
	
	}

	public Component getTableCellRendererComponent(
			JTable table, Object value, boolean b1, boolean b2, int i, int k){
		
		String text = String.valueOf(value);
		
		String memberOf = "";
		for(Brand b: Settings.getSettings().getBrands()){
			if(b.getName().equals(text)) {
				memberOf = b.getMemberOf().substring(3,4);
				break;
			}
		}
		if(memberOf.equals("g")){
			setFont(new Font("Groupe Leader", Font.BOLD, 13));
		}
		if(memberOf.equals("m")){
			setFont(new Font("Groupe Medium", Font.ITALIC, 13));
		}
		if(memberOf.equals("n")){
			setFont(new Font("Groupe Little", Font.PLAIN,11));
		}
		
		
		setHorizontalAlignment(SwingConstants.LEFT);
		setText(text);
		
		
		return this;
		
	}

}


hab ich etwas vergessen, oder muss man auf etwas speziell achten? liegt es am defaultcellrenderer

danke für jede hilfe...

gruss
 
Zuletzt bearbeitet:
Moin!
Die Methode getTableCellRendererComponent hat folgende Signatur:
Code:
getTableCellRendererComponent(JTable table, Object value, boolean isSelected,  boolean hasFocus, int row,  int column)
Hast du die Werte isSelected und hasFocus schonmal getestet? Ich vermute ja eher, das die Zellen schon selektiert sind, du das aber nur nicht visualisierst. D.h. wenn die Zelle selektiert ist, d.h. isSelected == true ist, musst du auch deine Zelle farblich markieren..

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Du bist mein Held!
Danke für deine schnelle Hilfe. mit "isSelected" klappt das einwandfrei.

Ich wusste nicht, dass man das individuell abfangen muss und dachte dass der DefaultCellRenderer das automatisch managed.

Danke.
 
Hallo,

Es ist wie Meiner_Einer sagt, deine Zellen sind selektiert, es wird nur nicht angezeigt, aber
wenn du in deinem CellRenderer in der Methode getTableCellRendererComponent zuerst
Code:
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column)
aufrufst, müsste die Tabelle normales Verhalten aufweisen + deine Änderungen, also auch die Selektion angezeigt werden.

MFG

zEriX
 
will ja nicht unverschämt werden, aber du scheints mir gerade erst heiss geworden zu sein.
Weisst du per Zufall gerade auch noch wie ich ohne graphics objekt den alpha kanal des Zellen Backgrounds setzen kann? so dass die selektion ganz normal aussieht.... wie in einer standard table.

ich finde nur getAlpha() aber kein setAlpha()....
 
war ein bischen zu langsam. Danke an euch beide. Das funktioniert super!!

Einwandfreie hilfe in diesem Forum. Wirklich sauber!!

Gruss Don27
 
Also wenn ich dich richtig verstanden habe müsstest du mit der Code-Zeile die ich vorhin gepostest hab, das erreichen was du möchtest.

Also das ganze müsste so aussehen

Java:
public class BrandCellRenderer extends DefaultTableCellRenderer{
	/**
	 * 
	 */
	private static final long serialVersionUID = -1239007292932147601L;



	public BrandCellRenderer(){
		setOpaque(true);
		setBackground(Color.white);
	
	}

	public Component getTableCellRendererComponent(
			JTable table, Object value, boolean b1, boolean b2, int i, int k){
		
                super.getTableCellRendererComponent(table, value, b1, b2, i, k);

		String text = String.valueOf(value);
		
		String memberOf = "";
		for(Brand b: Settings.getSettings().getBrands()){
			if(b.getName().equals(text)) {
				memberOf = b.getMemberOf().substring(3,4);
				break;
			}
		}
		if(memberOf.equals("g")){
			setFont(new Font("Groupe Leader", Font.BOLD, 13));
		}
		if(memberOf.equals("m")){
			setFont(new Font("Groupe Medium", Font.ITALIC, 13));
		}
		if(memberOf.equals("n")){
			setFont(new Font("Groupe Little", Font.PLAIN,11));
		}
		
		
		setHorizontalAlignment(SwingConstants.LEFT);
		setText(text);
		
		
		return this;
		
	}

}

MFG

zEriX
 
Zurück