Tabelle / Renderer

  • Themenstarter Themenstarter ByeBye 31659
  • Beginndatum Beginndatum
B

ByeBye 31659

Hallo,

ich habe zwei Fragen:

1. Kann mir jemand allgemein erklären, wozu man einen Renderer und wozu ein TableModel braucht? Der Renderer ist doch für die grafische Zeichnung der Tabelle zuständig, oder? Wozu braucht man dann noch ein Model?

2. Ich habe eine Tabelle mit x Spalten. Wenn nun eine Zelle in der Spalte 4 leer ist, so soll diese einen grünen Hintergrund bekommen. Wenn etwas in dieser Zelle steht, soll der HIntergrund rot sein. Als Ergänzung soll es später eventuell noch so gemacht werden, das dann die ganze Zeile die jeweilige Farbe erhält...

Ich hab natürlich schon etwas versucht, aber leider funktioniert das nicht. Hier mein bisheriger Code:

Fenster mit Tabelle:
Code:
import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Fenster extends JFrame {

	JTable tbl = null;
	TableModel model = null;
	TableSorter sorter = null;
	JScrollPane scrPaneTable = null;
	String header[] = {"ID", "muh"};
	String data[][] = {{"hallo", "duhu"}, {"selber", ""}};
	
	public Fenster(){
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(100,100,400,400);
		
		tbl = new JTable(data, header);
		tbl.setDefaultRenderer(tbl.getColumnClass(0), new MyTableCellRenderer());
		tbl.setPreferredSize(new Dimension(200,200));
		scrPaneTable = new JScrollPane(tbl);
		scrPaneTable.setPreferredSize(new Dimension(200,200));

		getContentPane().add(scrPaneTable);
		setVisible(true);
	}
}

Mein Renderer:
Code:
import java.awt.Color;
import java.awt.Component;

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

public class MyTableCellRenderer extends JLabel implements TableCellRenderer {

	Color color = null;
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		if(column == 1){			
			if(value.toString().equals("")){
				color = Color.green;
			}
			else{
				color = Color.red;
			}
		}
		setBackground(color);
		setText(value.toString());
		return this;
	}
	
	@Override
	public void setBackground(Color arg0) {
		// TODO Auto-generated method stub
		super.setBackground(arg0);
	}
}

Kann mir da jemand weiterhelfen?
 
Java:
if(column == 1){			
			if(value.toString().equals("")){
				color = Color.green;
			}
			else{
				color = Color.red;
			}
}
setBackground(color);
setText(value.toString());
return this;

Was ist wendn Column nicht 1 ist? ;) Dann gibst du setBackground(null) weiter.
Kann mir nicht vorstellen das dies gewünscht ist.
 
Oh stimmt!

Aber leider behebt es das Problem nicht, die 1 brauche ich dafür, das der Renderer nur die Zellen aus der 2.Spalte bearbeitet.

Die Schrift innerhalb der Tabelle wird fett, was für mich ein Zeichen dafür ist, das es mit dem Label funktioniert, aber der Hintergrund bleibt leider immer weiß.

Woran kann das denn liegen?

Ich habs :-) :-) :-) Ich hab nur folgende Zeile vergessen:
Code:
setOpaque(true);
 
Zurück