JTable mit TableCellRenderer

f-zoid

Mitglied
Also ich hab folgendes Problem:

1. Ich möchte eine tabelle haben, in der sich jede 2 Zeile farblich abhebt, dachte dazu nehm ich den CellRenderer.
Nun hat das bei mir aber zu folge, das ich wenn ich meine Tabelle schreibe entweder die Daten drin habe, oder nur dir Farben ohne Daten, hier mein Code
Code:
        MyTableModel myt = new MyTableModel(data , columnNames);
        JTable table = new JTable(myt);
        
        
        TableColumn dataColumn = table.getColumn(columnNames[0]);
        dataColumn.setMaxWidth(columnNames[0].length()*10);
        
        System.out.println("cellrender setzten");
        //table.setDefaultRenderer(Object.class,new MyTableCellRenderer());
        System.out.println("cellrenderer gesetzt");
data ist dabei ein Object[][], in columnNames sind lediglich die Tabellenüberschriften...
Braucht ihr noch mehr Code?

2. Desweiteren würde ich gerne die einen Spalteneinträge mittag haben, is das möglich?
bin für jede Hilfe dankbar

kann noch schnell den CellRenderer posten:
Code:
package GUI;

import java.awt.Color;
import java.awt.Component;

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

public class MyTableCellRenderer implements TableCellRenderer {
    public MyTableCellRenderer() {
    }

    public Component getTableCellRendererComponent(JTable table, Object value, 
                                                   boolean isSelected, 
                                                   boolean hasFocus, int row, 
                                                   int column) {
             
        double solution = row / 2.0; 
        
        if (Math.round(solution)-solution == 0){
            table.setBackground(new Color(200,200,200));
        } else {
            table.setBackground(new Color(255,255,255));
        }
        return null;
    }
}
 
Hallo,

schau mal hier:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.math.BigInteger;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

public class ColoredTableExample extends JFrame {

	private JColoredTable table = new JColoredTable();

	public ColoredTableExample() {
		super("Colored Table Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);

		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		this.add(new JScrollPane(table), BorderLayout.CENTER);

		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new ColoredTableExample();
	}

	class JColoredTable extends JTable {
		public JColoredTable() {
			this.setModel(new QuadratTableModelSimple());
		}

		public Component prepareRenderer(TableCellRenderer renderer,
				int rowIndex, int vColIndex) {

			Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
			if (c instanceof JComponent) {
				JLabel jl = (JLabel) c;

				if (vColIndex % 2 == 0) {
					jl.setBackground(Color.CYAN);
					jl.setAlignmentX(JLabel.RIGHT_ALIGNMENT);
					jl.setHorizontalAlignment(JLabel.CENTER);
				} else {
					jl.setBackground(Color.PINK);
					jl.setHorizontalAlignment(JLabel.RIGHT);
				}
			}
			return c;
		}

	}

	class QuadratTableModelSimple extends AbstractTableModel {
		public int getRowCount() {
			return 30;
		}

		public int getColumnCount() {
			return 30;
		}

		public Object getValueAt(int row, int col) {
			return new BigInteger("" + row).pow(col);
		}

		public String getColumnName(int column) {
			return "Spalte" + column;
		}
	}
}


Vg Erdal
 
Zurück