Buton in tableviewer

schuetzejanett

Erfahrenes Mitglied
hallo,

habe in meinem Prog einen Tableviewer mit 4 Spalten in der 5. möchte ich jetzt gerne einen Button platzieren, diser soll in jeder Zeile zu sehen sein. Wie bekomme ich diesen Button in die Tabelle.
 
habe es jetzt doch noch mal mit den Buttons für ne Tabelle versucht und mal in kleines beispiel erstellt. und ich sehe einen Button zumindest fast. wie man auf dem bild sieht.

GYNI262529P.jpg



So hier mal der Quellcode

Als erstes die Mainklasse in der der der Tableviewer, die Tabelle und die Buttons erzeugt werden.

Code:
public class MainClass { 

   private Shell sShell = null; 

   public static void main(String[] args) { 
    
      Display display = Display.getDefault(); 
      MainClass thisClass = new MainClass(); 
      thisClass.createSShell(); 
      thisClass.sShell.open(); 

      while (!thisClass.sShell.isDisposed()) { 
         if (!display.readAndDispatch()) 
            display.sleep(); 
      } 
      display.dispose(); 
   } 
    
   private void createSShell() { 
      sShell = new Shell(); 
      sShell.setText("Shell"); 
      sShell.setSize(new Point(300, 200)); 
      sShell.setLayout(new GridLayout()); 

      Composite parent = new Composite(sShell, SWT.NONE); 
      parent.setLayout(new FillLayout()); 
      TableViewer tableViewer = new TableViewer(parent, SWT.BORDER 
            | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); 

      tableViewer.getTable().setHeaderVisible(true); 
      tableViewer.getTable().setLinesVisible(true); 
      tableViewer.setContentProvider(new MyContentProvider()); 
      MyLabelProvider labelProv = new MyLabelProvider(); 
      tableViewer.setLabelProvider(labelProv); 
      labelProv.createColumns(tableViewer.getTable()); 
      tableViewer.setInput(getFamily()); 
      tableViewer.refresh(); 
      Table table = tableViewer.getTable(); 
      TableItem[] items = table.getItems(); 
      for (TableItem item : items) { 
         TableEditor editor = new TableEditor(table); 
         Button button = new Button(table, SWT.PUSH); 
         button.setText("dateils");          
         button.pack(); 
         editor.minimumWidth = button.getSize().x; 
         editor.horizontalAlignment = SWT.LEFT; 
         editor.setEditor(button, item, 3); 
      } 
   } 

   private ArrayList<Person> getFamily() { 
      ArrayList<Person> family = new ArrayList<Person>(); 
      family.add(new Person("Meier", "Werner", 40)); 
      family.add(new Person("Meier", "Monika", 38)); 
      family.add(new Person("Meier", "Verena", 14)); 
      family.add(new Person("Meier", "Sven", 10)); 
      return family; 
   } 
}

und jetzt die Klassen Person sowie Content und Labelprovider

Code:
package test; 

public class Person { 

   public String lastName; 
   public String firstName; 
   public int age; 

   public Person(String lastName, String firstName, int age) { 
      super(); 
      this.lastName = lastName; 
      this.firstName = firstName; 
      this.age = age; 
   } 
}

package test; 

import java.util.ArrayList; 

import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.Viewer; 

public class MyContentProvider implements IStructuredContentProvider { 

   @SuppressWarnings("unchecked") 
   @Override 
   public Object[] getElements(Object inputElement) { 

      return ((ArrayList<Person>) inputElement).toArray(); 
   } 

   @Override 
   public void dispose() { 
      // TODO Auto-generated method stub 

   } 

   @Override 
   public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 
      // TODO Auto-generated method stub 

   } 

} 


package test; 

import org.eclipse.jface.viewers.ITableLabelProvider; 
import org.eclipse.jface.viewers.LabelProvider; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableColumn; 

public class MyLabelProvider extends LabelProvider implements 
      ITableLabelProvider { 

   @Override 
   public Image getColumnImage(Object element, int columnIndex) { 

      return null; 
   } 

   @Override 
   public String getColumnText(Object element, int columnIndex) { 
      String result = ""; 
      switch (columnIndex) { 
      case 0: 
         result = ((Person) element).lastName; 
         break; 
      case 1: 
         result = ((Person) element).firstName; 
         break; 
      case 2: 
         result = "" + ((Person) element).age; 
         break; 
      default: 
         break; 
      } 
      return result; 
   } 

   public void createColumns(Table table) { 
      String[] titles = { "Nachname", "Vorname", "Alter" }; 
      int[] bounds = { 100, 100, 100 }; 

      for (int i = 0; i < titles.length; i++) { 
         TableColumn column = new TableColumn(table, SWT.LEFT, i); 
         column.setText(titles[i]); 
         column.setWidth(bounds[i]); 
         column.setResizable(true); 
      } 
   } 
}

Fällt irgendjemand etwas auf, was ich ändern könnte das die buttons für jede zeile, in der richtigen spalte und höhe erscheinen
 
Zurück