# JTable Ganze Zeile markieren



## NicolasA (6. Feb 2006)

Hallo,

ich habe eine Frage bezüglich dem Einfärben von JTables. Wie bekomme ich hin, dass wenn der die Zelle den Inhalt "compiled" besitzt, nicht nur die Zelle, sonder die ganze Zeile farbig markiert wird. Also so wie es der else-Block im untenstehenden Source-Code tut?


```
package gui;

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 TabellenRenderer extends JLabel implements TableCellRenderer{

	public Component getTableCellRendererComponent(
				JTable meModulTabelle, 
				Object value, 
				boolean selektiert, 
				boolean fokusiert, 
				int zeile, 
				int spalte) {

		setOpaque(true);
		setFont(meModulTabelle.getFont());
		setForeground(meModulTabelle.getForeground());
		setBackground(meModulTabelle.getBackground());
		setText((String) value);
		
		String inhaltLabel = (String) value;
		
		if (inhaltLabel.compareTo("compiled") == 0) {
			setBackground(Color.GREEN);
		}
		
		else {
				setBackground(Color.RED);
		}

	return this;
	}

}
```
[/code]


----------



## Sky (6. Feb 2006)

Du fragst value ab, also den Wert der Zelle. Du müsstest abfragen wenn "compiled" in Zeile "zeile" und Spalte "x" (also wo halt "compiled" drinne steht) abfragen.


----------



## NicolasA (6. Feb 2006)

Erstmal danke für die schnell Antwort ...

Hast du auch einen Ansatz wie man sowas realisieren könnte?
Ich meine an die Zeile und Spalte kommen ich ja dran, aber ich frage halt nur immer den Inhalt einer
Zelle ab.


----------



## Sky (6. Feb 2006)

Anonymous hat gesagt.:
			
		

> Ich meine an die Zeile und Spalte kommen ich ja dran, aber ich frage halt nur immer den Inhalt einer
> Zelle ab.



z.B.:

```
Object inhalt = meModulTabelle.getValueAt( zeile, 0 );
```


----------



## André Uhres (6. Feb 2006)

```
/*
 * TableRowRendering.java
 */
import java.awt.*; 
import java.text.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.table.*; 
public class TableRowRendering extends JFrame{ 
    public TableRowRendering(){ 
        //  Model: 
        Object[] columnNames = {"Type", "Date", "Company", "Shares", "Price"}; 
        Object[][] data = 
        { 
            {"Compiled", new Date(), "IBM", new Integer(1000), new Double(80.50)}, 
            {"Sell",new Date(), "MicroSoft", new Integer(2000), new Double(6.25)}, 
            {"Sell",new Date(), "Apple", new Integer(3000), new Double(7.35)}, 
            {"Compiled", new Date(), "Nortel", new Integer(4000), new Double(20.00)} 
        }; 
        model = new DefaultTableModel(data, columnNames) { 
            public Class getColumnClass(int column) { 
                return getValueAt(0, column).getClass(); 
            } 
        }; 
        // prepareRenderer überschreiben: 
        table = new JTable( model ) { 
            public Component prepareRenderer( 
                    TableCellRenderer renderer, int row, int column) { 
                Component c = super.prepareRenderer(renderer, row, column); 
                if (!isRowSelected(row)) { 
                    String type = (String)getModel().getValueAt(row, 0); 
                    c.setBackground(table.getBackground());
                    if(type.equalsIgnoreCase("compiled")){
                        c.setBackground(Color.red);
                    }
                } 
                if (isRowSelected(row) && isColumnSelected(column)) 
                    ((JComponent)c).setBorder(selected); 
                return c; 
            } 
        }; 
        table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
        getContentPane().add(new JScrollPane( table ), BorderLayout.CENTER); 
    } 
    private JTable table; 
    private DefaultTableModel model;
    private Border selected = new LineBorder(Color.GREEN); 
    public static void main(String[] args) { 
        TableRowRendering frame = new TableRowRendering(); 
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); 
        frame.pack(); 
        frame.setLocationRelativeTo( null ); 
        frame.setVisible(true); 
    } 
}
```


----------



## NicolasA (7. Feb 2006)

Danke das hat Funktioniert!
Das Thema kann damit abehakt werden.

NicolasA


----------



## PeterM (2. Okt 2006)

Hallo,

ich hab eine große JTable die soweit auch funktioniert und ich kann auch alles Markieren.
Mein Problem ist nun allerdings folgendes:

Wenn ich eine Zeile markiere und dann die Maus z.B. nach oben oder unten bewege,
dann werden auch diese Zeilen markiert. Genau dies soll verhindert werden!

Hat jemand einen Rat? DANKE  :autsch:


----------



## André Uhres (2. Okt 2006)

table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


----------



## PeterM (2. Okt 2006)

André Uhres hat gesagt.:
			
		

> table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


Perfekt - danke!  :toll:


----------

