Sie sind auf Seite 1von 20

Individuelle Table-Designs

Hinweis
Die Prsentationen und die damit verbundenen
Materialien, die whrend der Konferenz angeboten werden
umfassen auch Aussagen ber die
Produktentwicklungsplne von XDEV Software. Viele
Faktoren knnen erheblichen Einfluss auf
Produktentwicklungsplne, die Art und den Zeitpunkt der
zuknftigen Produkt-Releases haben. Dementsprechend
dienen die Informationen, ausschlielich als unverbindliche
Vorschau und stellen keine Verpflichtung dar, jegliches
Material, Code oder Funktionalitt zu liefern und sollten
nicht fr Kaufentscheidungen herangezogen werden.
Individuelle Table-Designs
Renderer und Editoren
Renderer
Werden zur Darstellung einzelner Zellen /
Spalten verwendet
Ein Renderer kann fr mehrere Spalten
verwendet bzw. registriert werden
Editoren
Werden zum ndern der Daten in der Tabelle
verwendet
Ein Editor kann fr mehrere Spalten
verwendet bzw. registriert werden

JRE Renderer
Standard-Renderer (JTable)
String
toString() des gerenderten Objekts
Boolean
Zeigt Checkbox
Zahlen
Formatiert Zahlen in der aktuellen
Lndereinstellung
XAPI Renderer
Standard-Renderer (XdevTable)
Datum
Formatiert Datum, je nach VT-Einstellung
Bilder
Zeigt Bild-Miniaturansicht
Blob
Zeigt Datei-Auswahlfeld
Registrierung
Global
Table#setDefaultRenderer/Editor(value)

Per Typ
Table#setDefaultRenderer/Editor(columnType,valu
e)

Per Column
TableColumn#setCellEditor/Renderer(value)
Table interna
Pseudocode

getCellRenderer(int row, int column)
{
Renderer r = getRendererForColumn(column)
if(r == null)
r = getRendererForType(getColumnType(column));
if(r == null)
r = getDefaultRenderer();
return r;
}

getCellRendererForType(Class columnType)
{
Renderer r = getRendererForType(columnType);
if(r != null)
return r;

Class superType = columnType.getSuperClass();
if(superType != null)
return getRendererForType(superType);

return null;
}
Interface TableCellRenderer
public interface TableCellRenderer
{
Component getTableCellRendererComponent(
JTable table, // aktuelle Tabelle
Object value, // Wert der Zelle
boolean isSelected, // ist Zelle ausgewhlt ?
boolean hasFocus, // hat Zelle aktuell den Fokus?
int row, // Zeile
int column); // Spalte
}
Wird fr jede Zelle aufgerufen
Die zurckgegebene Komponente wird
gezeichnet
Nur der sichtbare Bereich der Table wird
gerendert
DefaultTableCellRenderer
CellRenderer der JLabel benutzt
Icon und Text mit Hintergrundfarbe
Ausreichend fr die meisten Flle
Eigene Renderer
Ableitung von DefaultTableCellRenderer
Komplette Eigenimplementierung
Ableitung von
DefaultTableCellRenderer
public class NumberTableCellRenderer 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);

if(value instanceof Number)
{
Number number = (Number)value;
if(number.doubleValue() < 0)
{
setForeground(Color.red);
}
else
{
setForeground(table.getForeground());
}
}
return this;
}
}

Dem
o
Interface TableCellEditor
public interface TableCellEditor
{
Component getTableCellEditorComponent(
JTable table, // aktuelle Table
Object value, // Wert der Zelle
boolean isSelected, // ist Zelle ausgewhlt?
int row, // Zeile
int column); // Spalte

public Object getCellEditorValue();
}
Wird fr jede Zelle aufgerufen
Die zurckgegebene Komponente wird
verwendet
Immer nur eine Zelle ist im Editormodus
DefaultCellEditor
Editor fr gngige Typen
TextField
CheckBox
ComboBox

XDEV Editoren
Date
Blob
Eigene Editoren
Ableitung von DefaultCellEditor
Komplette Eigenimplementierung
Ableitung von AbstractCellEditor
public class EnumTableCellEditor extends AbstractCellEditor implements TableCellEditor
{
private XdevComboBox comboBox;


public EnumTableCellEditor(Object[] values)
{
comboBox = new XdevComboBox(new DefaultComboBoxModel(values));
comboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopCellEditing();
}
});

// prevent value change on keyboard navigation
comboBox.putClientProperty("JComboBox.isTableCellEditor",Boolean.TRUE);
}


@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column)
{
comboBox.setSelectedItem(value);

return comboBox;
}


@Override
public Object getCellEditorValue()
{
return comboBox.getSelectedItem();
}
}

Dem
o
Q / A
XDEV 4
Jetzt downloaden
xdev-software.de