Hi liebe Leute,
ich habe ein Problem, bei dem ich einfach nicht weiter komme.
Ich verwende einen TableViewer, den ich mit daten aus einem Modell füttere, was auch passt. Hinzufügen bzw. entfernen kann man auch ganz praktisch, soweit so gut.
Allerdings muss, um Änderungen an den Datensätzen an sich im Table sichtbar zu machen, ein LabelObserver eingesetzt werden, welcher diese Änderungen erfasst und weitergibt.
Allerdings hab ichs bisher nicht hingebracht, auch nur irgendeine Änderung zu erfassen, drum wende ich mich an euch, in der Hoffnung, ihr könnt mir hier etwas klarheit verschaffen.
Habe allen Code, der in diese Richtung ging wieder entfernt, damit es wenigstens ein wenig übersichtlicher wird. Stand unten ist eben eine Tabelle, welche mit Initialdaten gefüllt wird und wo man hinzufügen/entfernen kann. Es solln aber eben noch Modelländerungen angezeigt werden.
Zusatzinfo: Vorlage war zu gutem Teil das Tutorial von Lars Vogel
--- Klasse Person: ---
--- Mitglied erweitert Person ---
--- View mit Tabelle ---
Vielen Dank fürs Lesen und ich hoffe, jemand kann mir helfen
lg
M
ich habe ein Problem, bei dem ich einfach nicht weiter komme.
Ich verwende einen TableViewer, den ich mit daten aus einem Modell füttere, was auch passt. Hinzufügen bzw. entfernen kann man auch ganz praktisch, soweit so gut.
Allerdings muss, um Änderungen an den Datensätzen an sich im Table sichtbar zu machen, ein LabelObserver eingesetzt werden, welcher diese Änderungen erfasst und weitergibt.
Allerdings hab ichs bisher nicht hingebracht, auch nur irgendeine Änderung zu erfassen, drum wende ich mich an euch, in der Hoffnung, ihr könnt mir hier etwas klarheit verschaffen.
Habe allen Code, der in diese Richtung ging wieder entfernt, damit es wenigstens ein wenig übersichtlicher wird. Stand unten ist eben eine Tabelle, welche mit Initialdaten gefüllt wird und wo man hinzufügen/entfernen kann. Es solln aber eben noch Modelländerungen angezeigt werden.
Zusatzinfo: Vorlage war zu gutem Teil das Tutorial von Lars Vogel
--- Klasse Person: ---
Java:
public class Person extends AbstractModelObject{
private int ID;
public enum Anrede {
Herr, Frau
};
private Anrede Anrede;
private String Vorname, Nachname, Adresse, Ort, Telefon, Email, Handy;
private int Plz;
private Date Gebdat;
public Person() {
this.ID = -1;
}
public Person(int _ID, Anrede _Anrede, String _Vorname, String _Nachname,
String _Adresse, String _Ort, String _Telefon, String _Email,
String _Handy, int _Plz, Date _Gebdat) {
this.ID = _ID;
this.Anrede = _Anrede;
this.Vorname = _Vorname;
this.Nachname = _Nachname;
this.Adresse = _Adresse;
this.Ort = _Ort;
this.Plz = _Plz;
this.Handy = _Handy;
this.Telefon = _Telefon;
this.Email = _Email;
this.Gebdat = _Gebdat;
}
/* Methoden */
public int getAlter() {
Calendar GebTag = Calendar.getInstance();
GebTag.setTime(this.Gebdat);
Calendar today = Calendar.getInstance();
int age = today.get(Calendar.YEAR) - GebTag.get(Calendar.YEAR);
if (today.get(Calendar.DAY_OF_YEAR) < GebTag.get(Calendar.DAY_OF_YEAR))
age--;
return age;
}
public String toString() {
if (this.Anrede != null)
return this.Anrede.toString() + " " + this.Vorname + " " + this.Nachname;
else
return this.Vorname + " " + this.Nachname;
}
/* Getter und Setter */
public int getID() {
return this.ID;
}
public void setID(int iD) {
firePropertyChange("ID", this.ID, this.ID = iD);
}
public Anrede getAnrede() {
return this.Anrede;
}
public void setAnrede(Anrede anrede) {
firePropertyChange("anrede", this.Anrede, this.Anrede = anrede);
}
public String getVorname() {
return this.Vorname;
}
public void setVorname(String vorname) {
firePropertyChange("vorname", this.Vorname, this.Vorname = vorname);
}
public String getNachname() {
return this.Nachname;
}
public void setNachname(String nachname) {
firePropertyChange("nachname", this.Nachname, this.Nachname = nachname);
}
[...]
}
Java:
public abstract class AbstractModelObject {
private final PropertyChangeSupport m_propertyChangeSupport = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener listener) {
m_propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
m_propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
m_propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
m_propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
m_propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
}
--- Mitglied erweitert Person ---
Java:
public enum ModelProvider {
INSTANCE;
private List<Mitglied> Mitglieder;
private ModelProvider() {
Mitglieder = new ArrayList<Mitglied>();
/* Datenbankzugriff um die user auszulesen */
[...]
}
public List<Mitglied> getMitglieder() {
return Mitglieder;
}
public void printAll() {
for ( Mitglied m : Mitglieder ) {
System.out.println(m.getAnrede() + " " + m.getVorname() + " " + m.getNachname());
}
}
}
--- View mit Tabelle ---
Java:
private MitgliederComparator comparator;
private TableViewer viewer;
private WritableList input;
// Icons
private static final Image HAT_PARTNER = Activator.getImageDescriptor(
"icons/partner.png").createImage();
public void createPartControl(Composite parent) {
GridLayout layout = new GridLayout(2, false);
parent.setLayout(layout);
Label searchLabel = new Label(parent, SWT.NONE);
searchLabel.setText("Search: ");
final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH);
searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
//createViewer(parent);
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
createColumns(parent, viewer);
final Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
// Layout the viewer
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalSpan = 2;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
viewer.getControl().setLayoutData(gridData);
// Sortierer fürn Table
comparator = new MitgliederComparator();
viewer.setComparator(comparator);
// Bindes
input = new WritableList(ModelProvider.INSTANCE.getMitglieder(),
Mitglied.class);
//viewer.setInput(input);
ViewerSupport.bind(
viewer,
input,
BeanProperties.values(new String[] { "anrede", "vorname",
"nachname", "geburtsdatum" }));
// Testfunktionen - Löschen
Button delete = new Button(parent, SWT.PUSH);
delete.setText("Delete");
delete.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (!viewer.getSelection().isEmpty()) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
Mitglied m = (Mitglied) selection.getFirstElement();
input.remove(m);
}
}
});
// Hinzufügen
Button add = new Button(parent, SWT.PUSH);
add.setText("Add");
add.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Mitglied m = new Mitglied();
m.setVorname("Test1");
m.setNachname("Test2");
input.add(m);
}
});
//Werte tauschen
Button change = new Button(parent, SWT.PUSH);
change.setText("Switch First / Lastname");
change.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (!viewer.getSelection().isEmpty()) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
Mitglied m = (Mitglied) selection.getFirstElement();
System.out.println(m.getVorname() + " - " + m.getNachname());
String temp = m.getNachname();
m.setNachname(m.getVorname());
m.setVorname(temp);
}
}
});
//Modell ausgeben
Button print = new Button(parent, SWT.PUSH);
print.setText("Print");
print.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ModelProvider.INSTANCE.printAll();
}
});
}
public TableViewer getViewer() {
return viewer;
}
// This will create the columns for the table
private void createColumns(final Composite parent, final TableViewer viewer) {
// Anrede
TableViewerColumn col = createTableViewerColumn("Anrede", 50, 0);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
if (m.getAnrede() == Anrede.Herr)
return "Herr";
else
return "Frau";
}
});
// Vorname
col = createTableViewerColumn("Vorname", 100, 1);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getVorname();
}
});
// Nachname
col = createTableViewerColumn("Nachname", 100, 2);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getNachname();
}
});
// GebTag
col = createTableViewerColumn("Gebutsdatum", 75, 3);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
Format format = new SimpleDateFormat("dd.MM.yyyy");
return format.format(m.getGebdat()).toString();
}
});
// Partner
col = createTableViewerColumn("Partner", 50, 4);
col.setLabelProvider(new CenterImageLabelProvider() {
@Override
public Image getImage(Object element) {
if (((Mitglied) element).hatPartner()) {
return HAT_PARTNER;
} else {
return null;
}
}
});
// Adresse
col = createTableViewerColumn("Adresse", 150, 5);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getAdresse();
}
});
// PLZ
col = createTableViewerColumn("PLZ", 50, 6);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return String.valueOf(m.getPlz());
}
});
// Ort
col = createTableViewerColumn("Ort", 75, 7);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getOrt();
}
});
// Telefon
col = createTableViewerColumn("Telefon", 100, 8);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getTelefon();
}
});
// Handy
col = createTableViewerColumn("Handynummer", 100, 9);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getHandy();
}
});
// Mail
col = createTableViewerColumn("EMail", 125, 10);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Mitglied m = (Mitglied) element;
return m.getEmail();
}
});
}
private TableViewerColumn createTableViewerColumn(String title, int bound,
final int colNumber) {
final TableViewerColumn viewerColumn = new TableViewerColumn(viewer,
SWT.NONE);
final TableColumn column = viewerColumn.getColumn();
column.setText(title);
column.setWidth(bound);
column.setResizable(true);
column.setMoveable(true);
column.addSelectionListener(getSelectionAdapter(column, colNumber));
return viewerColumn;
}
private SelectionAdapter getSelectionAdapter(final TableColumn column,
final int index) {
SelectionAdapter selectionAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
comparator.setColumn(index);
int dir = comparator.getDirection();
viewer.getTable().setSortDirection(dir);
viewer.getTable().setSortColumn(column);
viewer.refresh();
}
};
return selectionAdapter;
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
/* *
* Erweiterter ImageLabelProvider, der die Labels zentriert
*/
private abstract class CenterImageLabelProvider extends
OwnerDrawLabelProvider {
protected void measure(Event event, Object element) {
}
protected void paint(Event event, Object element) {
Image img = getImage(element);
if (img != null) {
Rectangle bounds = ((TableItem) event.item)
.getBounds(event.index);
Rectangle imgBounds = img.getBounds();
bounds.width /= 2;
bounds.width -= imgBounds.width / 2;
bounds.height /= 2;
bounds.height -= imgBounds.height / 2;
int x = bounds.width > 0 ? bounds.x + bounds.width : bounds.x;
int y = bounds.height > 0 ? bounds.y + bounds.height : bounds.y;
event.gc.drawImage(img, x, y);
}
}
protected abstract Image getImage(Object element);
}
}
Vielen Dank fürs Lesen und ich hoffe, jemand kann mir helfen
lg
M
Zuletzt bearbeitet von einem Moderator: