Hallo zusammen,
ich arbeite nun schon länger an einer GUI welche eine JTable beinhaltet.
Da wurde mir hier auch schon super geholfen als es um einen eigenen CellEditor ging...
Die JTable hat einen eigenen Renderer, ein eigenes Model und einen eigenen Editor...
Das fluppt mittlerweile auch so wie ich das möchte. Je nach Bedingung werden die Zellen als Combo, Checkbox oder Label dargestellt auch die Textfarben der Label habe ich unter Kontrolle...
Nun zu meinem Problem: egal was ich tue, egal an welcher stelle ich es einbinde, ich habe keinen Einfluss auf die Hintergrundfarbe der Tabelle!
Ich habe es ursprünglich im Renderer versucht... hier habe ich bei den passenden Bedingungen mit folgendem Code gearbeitet:
label.setBackground(Color.RED);
leider ohne Reaktion...
der Code wird aber erreicht... schreibe ich label.setForeground(Color.RED); funktioniert es auch...
label.setBorder... wird genau so ignoriert...
Selbst wenn ich an der Stelle wo ich die Table selber implementiere mit "table.setBackground(Color.blue);" arbeite bleibt der Tabellenhintergrund stur weiß...
an welcher Stelle könnte der Fehler versteckt sein?
Der letzte "else" Block vor den Gettern und Settern ist jener welcher...
(der code ist sauig, ich weiß... das ganze ist über die letzten Monate angewachsen, ich habe eigendlich 0 Ahnung und 0 Erfahrung wenn es um GUI bei Java geht...)
Code vom CellRenderer:
Ein Tipp wäre echt klasse!
Sören
ich arbeite nun schon länger an einer GUI welche eine JTable beinhaltet.
Da wurde mir hier auch schon super geholfen als es um einen eigenen CellEditor ging...
Die JTable hat einen eigenen Renderer, ein eigenes Model und einen eigenen Editor...
Das fluppt mittlerweile auch so wie ich das möchte. Je nach Bedingung werden die Zellen als Combo, Checkbox oder Label dargestellt auch die Textfarben der Label habe ich unter Kontrolle...
Nun zu meinem Problem: egal was ich tue, egal an welcher stelle ich es einbinde, ich habe keinen Einfluss auf die Hintergrundfarbe der Tabelle!
Ich habe es ursprünglich im Renderer versucht... hier habe ich bei den passenden Bedingungen mit folgendem Code gearbeitet:
label.setBackground(Color.RED);
leider ohne Reaktion...
der Code wird aber erreicht... schreibe ich label.setForeground(Color.RED); funktioniert es auch...
label.setBorder... wird genau so ignoriert...
Selbst wenn ich an der Stelle wo ich die Table selber implementiere mit "table.setBackground(Color.blue);" arbeite bleibt der Tabellenhintergrund stur weiß...
an welcher Stelle könnte der Fehler versteckt sein?
Der letzte "else" Block vor den Gettern und Settern ist jener welcher...
(der code ist sauig, ich weiß... das ganze ist über die letzten Monate angewachsen, ich habe eigendlich 0 Ahnung und 0 Erfahrung wenn es um GUI bei Java geht...)
Code vom CellRenderer:
Java:
package src;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.util.Vector;
import java.util.StringTokenizer;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.JTextComponent;
import org.w3c.dom.events.EventException;
public class MenuTableRenderer implements TableCellRenderer {
int zaehler1;
int zaehler2;
Vector rowPflicht;
Vector rowArt;
Vector rowOption;
int selection=0;
double select=0;
boolean stop = false;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(column == 0)
{
JLabel label = new JLabel((String) value);
if (rowArt.get(row).equals("TITEL"))
{
label.setFont(new Font("Tahoma", Font.BOLD, 14));
label.setForeground(new Color(20,20,90));
} else
{
label.setFont(new Font("Tahoma", Font.PLAIN, 12));
}
if(rowPflicht.get(row).equals("X") && table.getValueAt(row, 1).equals(" ")){
label.setForeground(Color.RED);
} else {
label.setForeground(Color.BLACK);
}
return label;
}else{
if (rowArt.get(row).equals("DROP"))
{
Vector inhalt = new Vector();
StringTokenizer tokenizer;
tokenizer = new StringTokenizer((String) rowOption.get(row), "#");
while (tokenizer.hasMoreTokens() == true){
if(tokenizer.hasMoreTokens() == true)
inhalt.add(tokenizer.nextToken());
}
if (value.equals(" "))
{
value = "0";
}
JComboBox combo = new JComboBox(inhalt);
if (value instanceof String)
{
combo.setSelectedIndex(Integer.parseInt((String) value));
}else if(value instanceof Double){
while(stop == false)
{
if(value.equals(select))
{
stop = true;
}else{
selection++;
select++;
System.out.println(selection);
}
if(selection>100)
{
stop = true;
selection = 0;
}
}
combo.setSelectedIndex(selection);
}
combo.setMaximumRowCount(20);
return combo;
} else if(rowArt.get(row).equals("CHECK"))
{
JCheckBox check = new JCheckBox();
check.setEnabled(true);
if (value.equals(1.0))
{
check.setSelected(true);
}
return check;
}else{
//JLabel label = new JLabel(value.toString());
JLabel label = new JLabel();
label.setFont(new Font("Tahoma", Font.PLAIN, 12));
label.setBackground(Color.RED);
label.setBorder(LineBorder.createGrayLineBorder());
if (rowArt.get(row).equals("TITEL"))
{
label.setFont(new Font("Tahoma", Font.BOLD, 14));
}
return label;
}
}
}
//GETTER UND SETTER
public int getZaehler1() {
return zaehler1;
}
public void setZaehler1(int zaehler1) {
this.zaehler1 = zaehler1;
}
public int getZaehler2() {
return zaehler2;
}
public void setZaehler2(int zaehler2) {
this.zaehler2 = zaehler2;
}
public Vector getRowPflicht() {
return rowPflicht;
}
public void setRowPflicht(Vector rowPflicht) {
this.rowPflicht = rowPflicht;
}
public Vector getRowArt() {
return rowArt;
}
public void setRowArt(Vector rowArt) {
this.rowArt = rowArt;
}
public Vector getRowOption() {
return rowOption;
}
public void setRowOption(Vector rowOption) {
this.rowOption = rowOption;
}
}
Ein Tipp wäre echt klasse!
Sören