Individuelle Table Designs

Embed Size (px)

Citation preview

PowerPoint-Prsentation

Individuelle Table-Designs

1HinweisDie 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 EditorenRendererWerden zur Darstellung einzelner Zellen / Spalten verwendetEin Renderer kann fr mehrere Spalten verwendet bzw. registriert werdenEditorenWerden zum ndern der Daten in der Tabelle verwendetEin Editor kann fr mehrere Spalten verwendet bzw. registriert werden

JRE RendererStandard-Renderer (JTable)StringtoString() des gerenderten ObjektsBooleanZeigt CheckboxZahlenFormatiert Zahlen in der aktuellen LndereinstellungXAPI RendererStandard-Renderer (XdevTable)DatumFormatiert Datum, je nach VT-EinstellungBilderZeigt Bild-Miniaturansicht BlobZeigt Datei-AuswahlfeldRegistrierungGlobalTable#setDefaultRenderer/Editor(value)

Per TypTable#setDefaultRenderer/Editor(columnType,value)

Per ColumnTableColumn#setCellEditor/Renderer(value)Table internaPseudocode

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 TableCellRendererpublic interface TableCellRenderer {Component getTableCellRendererComponent(JTable table, // aktuelle TabelleObject value, // Wert der Zelleboolean isSelected, // ist Zelle ausgewhlt ?boolean hasFocus,// hat Zelle aktuell den Fokus?int row, // Zeileint column);// Spalte}Wird fr jede Zelle aufgerufenDie zurckgegebene Komponente wird gezeichnetNur der sichtbare Bereich der Table wird gerendertDefaultTableCellRendererCellRenderer der JLabel benutztIcon und Text mit HintergrundfarbeAusreichend fr die meisten FlleEigene RendererAbleitung von DefaultTableCellRendererKomplette EigenimplementierungAbleitung von DefaultTableCellRendererpublic class NumberTableCellRenderer extends DefaultTableCellRenderer{@Overridepublic 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;}}

DemoInterface TableCellEditorpublic interface TableCellEditor{Component getTableCellEditorComponent(JTable table, // aktuelle TableObject value,// Wert der Zelleboolean isSelected,// ist Zelle ausgewhlt?int row, // Zeileint column);// Spalte

public Object getCellEditorValue();}Wird fr jede Zelle aufgerufenDie zurckgegebene Komponente wird verwendetImmer nur eine Zelle ist im EditormodusDefaultCellEditorEditor fr gngige TypenTextFieldCheckBoxComboBox

XDEV EditorenDateBlobEigene EditorenAbleitung von DefaultCellEditorKomplette EigenimplementierungAbleitung von AbstractCellEditorpublic class EnumTableCellEditor extends AbstractCellEditor implements TableCellEditor{private XdevComboBoxcomboBox;

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 navigationcomboBox.putClientProperty("JComboBox.isTableCellEditor",Boolean.TRUE);}

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

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

DemoQ / A?!XDEV 4Jetzt downloadenxdev-software.de