W
wallie
Gast
Hallo,
möchte eine Tabellenzelle nachdem die JTable erstellt wurde farbig machen. Funktioniert auch soweit, nur wenn ich einen doppelklick in die 1.spalte mache friert die jtable ein??! Woran liegt das?
class: ColorRenderer
möchte eine Tabellenzelle nachdem die JTable erstellt wurde farbig machen. Funktioniert auch soweit, nur wenn ich einen doppelklick in die 1.spalte mache friert die jtable ein??! Woran liegt das?
Code:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
import javax.swing.*;
import javax.swing.table.*;
public class TableColor extends JFrame
{
ColorRenderer colorRenderer;
public TableColor()
{
String[] columnNames = {"Date", "String", "Integer", "Boolean"};
Object[][] data =
{
{new Date(), "A", new Integer(1), new Boolean(true)},
{new Date(), "B", new Integer(2), new Boolean(false)},
{new Date(), "C", new Integer(3), new Boolean(true)},
{new Date(), "D", new Integer(4), new Boolean(false)}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable tabelle = new JTable( model )
{
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
// By overriding this method we can use a single renderer for every column
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
colorRenderer.setBackground(c, row, column);
return c;
}
};
tabelle.setPreferredScrollableViewportSize(tabelle.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( tabelle );
getContentPane().add( scrollPane );
// Create blinking color renderer
colorRenderer = new ColorRenderer( tabelle );
colorRenderer.setCellColor(1, 1, Color.YELLOW);
}
public static void main(String[] args)
{
TableColor frame = new TableColor();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
}
class: ColorRenderer
Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
public class ColorRenderer
{
private JTable table;
private AbstractTableModel model;
private Map colors;
private Point location;
public ColorRenderer(JTable table)
{
this.table = table;
model = (AbstractTableModel)table.getModel();
colors = new HashMap();
location = new Point();
}
public void setBackground(Component c, int row, int column)
{
// Don't override the background color of a selected cell
if ( table.isCellSelected(row, column) ) return;
// The default render does not reset the background color
// that was set for the previous cell, so reset it here
if (c instanceof DefaultTableCellRenderer)
{
c.setBackground( table.getBackground() );
}
// In case columns have been reordered, convert the column number
column = table.convertColumnIndexToModel(column);
// Get cell color
Object key = getKey(row, column);
Object o = colors.get( key );
if (o != null)
{
c.setBackground( (Color)o );
return;
}
// Get row color
key = getKey(row, -1);
o = colors.get( key );
if (o != null)
{
c.setBackground( (Color)o );
return;
}
// Get column color
key = getKey(-1, column);
o = colors.get( key );
if (o != null)
{
c.setBackground( (Color)o );
return;
}
}
public void setCellColor(int row, int column, Color color)
{
Point key = new Point(row, column);
colors.put(key, color);
}
private Object getKey(int row, int column)
{
location.x = row;
location.y = column;
return location;
}
}