Zweifarbiger Hintergrund in einer TableCell?

Status
Nicht offen für weitere Antworten.

Oli

Top Contributor
Hallo,

ich möchte die Zelle einer Tabelle zweifarbig. Das JPanel der Zellt soll quasi einen zweifarbigen Hintergrund bekommen.

-------------
| FARBE 1 |
| FARBE 2 |
-------------

Ist das umsetzbar??

Grüße Oli
 
Probiers mal so:
Code:
	private class TableCellRenderer extends DefaultTableCellRenderer {
		@Override
		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			super.getTableCellRendererComponent(table, value, isSelected,
					hasFocus, row, column);
			
			setForeground(Color.RED);
			
			return this;
		}
		
		@Override
		protected void paintComponent(Graphics g) {
			Color orig = g.getColor();
			int h = (int)getHeight() / 2;
			g.setColor(Color.BLUE);
			g.fillRect(0, 0, getWidth(), h);
			g.setColor(Color.GREEN);
			g.fillRect(0, h + 1, getWidth(), h - 1);
			g.setColor(orig);
			
			
			super.paintComponent(g);			
		}
	}

Code:
	table.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer());
 
Hallo Niki,

vielen Dank, das funktioniert soweit. Allerdings soll das ja nur eine Zelle betreffen. Jetzt weiß ich nicht wie ich das lösen soll.

ich habe

Code:
if(row==0){
super....   
}

versucht, allerdings werden dann alle Zellen der Tabelle gleich dargestellt (auch mit Inhalt). Wie kann ich sicherstellen, dass nur eine Zelle angefasst wird, bzw. dass nur dann die überschrieben paintComonent() aufgerufen wird wenn ich es möchte?

Grüße Oli
 
Hab´s jetzt so gelöst, nicht wissend, ob das eine gut Lösung ist:

Code:
private class SpecialTableCellRenderer extends DefaultTableCellRenderer {
    int rows = 0;
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean         
                                                                                hasFocus, int row, int column) {
        this.rows = row;
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        setForeground(Color.RED);
        return this;
    }

    protected void paintComponent(Graphics g) {
        if (rows == 0) {
            Color orig = g.getColor();
            int h = (int) getHeight() / 2;
            g.setColor(Color.BLUE);
            g.fillRect(0, 0, getWidth(), h);
            g.setColor(Color.GREEN);
            g.fillRect(0, h + 1, getWidth(), h - 1);
            g.setColor(orig);
        }
        super.paintComponent(g);
    }
}

Grüße Oli
 
Ich hätts genauso gelöst. Solange etwas funktioniert kann es keine "unsaubere" Lösung sein. Hauptsache es tut das was es tun soll 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben