SWT Tabelle Zeilenumbruch im TableItem

haudek

Grünschnabel
Hallo,
kann mir jemand helfen, wie ich in meiner SWT Tabelle mit 3 Spalten, in der 2. Spalte ein TextArea in der Zelle bzw. Zeilenumbruch realisieren kann.

Ich lese aus einer DB Text ein. Dieser hat immer nach 70 Zeichen einen Zeilenumbruch in der Zelle.

Code:
 private void zeigeReiseberichte() {
      DBDatenManager selectDaten = new DBDatenManager();         //------ rufe DB auf
      reiseBerichtListe = selectDaten.readReiseberichte(selAdresse);
      
      DateFormat dat;
      dat = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.GERMANY);

      ReiseberichteTabelle.removeAll();
      for (Reiseberichte aktReiseberichte: reiseBerichtListe){
         TableItem item = new TableItem(ReiseberichteTabelle, SWT.NONE);
            item.setText(0, dat.format(aktReiseberichte.getReiseBerichtDatum()));
            
            item.setText(1, aktReiseberichte.getReiseBericht());
            item.setText(2, String.valueOf(aktReiseberichte.getSachbearbeiter()));
      }
Mit diesem Code ist die 2. Spalte einzeilig.

Kann es sein, dass es auch eine Textlängen-Obergrenze an Anzahl Zeichen gibt?

gruß
 
Hallo,

nun habe ich eine Lösung gefunden. Am Bsp. des folgenden Links konnte ich in meiner Tabelle Zellen mehrzeilig darstellen. Soweit ok!
http://dev.eclipse.org/viewcvs/inde.../eclipse/swt/snippets/Snippet231.java?view=co
http://www.eclipse.org/articles/art...DrawingTableAndTreeItems/index.html#_example6

MIt dieser Lösung kann ich aber die veränderte Höhe der Zeile nicht wieder zurück setzen, wenn die Tabelle nochmals mit anderem Inhalt gefüllt wird.
Code:
for (Reiseberichte aktReiseberichte: reiseBerichtListe){
	TableItem item = new TableItem(ReiseberichteTabelle, SWT.NONE | SWT.MULTI);
		
		item.setText(0, dat.format(aktReiseberichte.getRbDatum()));
		item.setText(1, aktReiseberichte.getReiseBericht());

		for (final Sachbearbeiter sachbearb: AppStart.sachbearbeiterListe){
    		if (aktReiseberichte.getSachbearbeiter()== sachbearb.getSachbearbeiterNr())
    		item.setText(2, sachbearb.getName());
    		
    	}
}

//--------- Tabellenzeilen bei Bedarf mehrzeilig darstellen -----------------------

if(ReiseberichteTabelle.getItemCount()>0){
	ReiseberichteTabelle.addListener(SWT.MeasureItem, new Listener() {
		public void handleEvent(Event event) {
			TableItem item = (TableItem)event.item;
			String text = item.getText(event.index);
			Point size = event.gc.textExtent(text);
			event.width = size.x + 2 * TEXT_MARGIN;
			event.height = Math.max(event.height, size.y + TEXT_MARGIN);
		}
	});										
	
	ReiseberichteTabelle.addListener(SWT.EraseItem, new Listener() {
		public void handleEvent(Event event) {
			event.detail &= ~SWT.FOREGROUND;
		}
	});

	ReiseberichteTabelle.addListener(SWT.PaintItem, new Listener() {
		public void handleEvent(Event event) {
			TableItem item = (TableItem)event.item;
			String text = item.getText(event.index);
			/* center column 1 vertically */
			int yOffset = 0;
			if (event.index == 1) {
				Point size = event.gc.textExtent(text);
				yOffset = Math.max(0, (event.height - size.y)/size.y);

			}
			event.gc.drawText(text, event.x + TEXT_MARGIN, event.y + yOffset, true);
		}
	});
}

Kann man beim nächsten Aufruf (Füllen) der Tabelle die Höhe der Zeilen wieder (quasi auf default) zurücksetzen? Kennt jemand eine Möglichkeit. Muss ich die Tabelleninstanz löschen? Und wenn, wie kann ich das im laufenden Programm tun?

Vielleicht hat einer ein ähnliches Problem gehabt!
gruß
 
Zuletzt bearbeitet:
Zurück