SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row

Sno0t

Mitglied
Hallo liebe Gemeinde,

Ich möchte in einer Table (über ein TableViewer erstellt) ein eigenes Composite einfügen und darstellen.
(Ein GridLayout mit einem Textlabel + Icon in auf der linken Seite der Cell, auf der rechten Seite in der oberen Zeile ein Label mit Text und in der unteren ebenso)

Soweit klappt es auch über ein TableEditor die Cell mit den Daten zu befüllen.
Nur stehe ich nun vor 2 Problemen:

Zum einen wird die Cell(bzw ja gesamte Row) nicht dynamisch an die benötigte Höhe angepasst, so geht ein Teil der Composite verloren.

Zum Anderen, ist der Bereich nun auch nicht mehr "im Gesamten", sprich als Selection innerhalb der Table anwählbar.

Daher die Fragen:
- Wie kann ich dafür sorgen das die Cell in ihren Dimensionen so angepasst wird, das der gesamte Content einer Cell sichtbar ist (oder man zumindest scrollen kann)

- Wie kann ich dafür sorgen, das eine Selection auf dem Composite an die Table weiter geleitet wird als würde ich die Row ganz normal auswählen?

Vielen Dank im Voraus.


Anhängend meine Code-Schnipsel:

erstellen der Table:
Java:
TableColumnLayout	layout	= new TableColumnLayout();

this.setLayout(layout);// "this" ist ein einfaches Composite auf dem die Table angezeigt wird.
TableViewer viewer = new TableViewer(this, SWT.MULTI);
// ContentCol ist die Column dessen Cells mit dem "speziellen" Composite ausgerüstet werden soll
	contentCol = new TableViewerColumn(tableViewer, SWT.NONE); 
	layout.setColumnData(contentCol.getColumn(), new ColumnWeightData(100, 50, true));
	tableViewer.setContentProvider(new ArrayContentProvider());

	Table table = tableViewer.getTable();
	table.setHeaderVisible(false);
	table.setLinesVisible(true);


Und die Update Methode des CellLabelProviders:
Java:
public void update(ViewerCell cell) {
				TableItem item = (TableItem) cell.getItem();
				
				Composite cellPane = new Composite(tableViewer.getTable(), SWT.NONE);
				cellPane.setLayout(new FillLayout());

				MyContent list = (MyContent) item.getData();
				Composite paneForContent = new Composite(cellPane, SWT.NONE);
				paneForContent.setLayout(new GridLayout(2, false));

				Label lblIconText = new Label(paneForContent, SWT.NONE);
				lblIconText.setText(list.getMyContentName());
				lblIconText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 2));
				// bisher wird noch kein icon hinzugefügt
				
				Label lblText1 = new Label(paneForContent, SWT.NONE);
				lblText1.setText(list.getParkName());
				lblText1.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
				
				Label lblText2 = new Label(paneForContent, SWT.NONE);
				lblText2.setText(list.getPowerUnitName());
				lblText2.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));

				TableEditor editor = new TableEditor(tableViewer.getTable());
				editor.grabHorizontal = true;
				editor.grabVertical = true;
				editor.setEditor(cellPane, item, cell.getColumnIndex());
				editor.layout();
			}
});


Beste Grüße
 

dzim

Top Contributor
Hi,

ich hab schon eine Weile nichts mehr mit SWT gemacht, aber ich glaube mich zu erinnern, dass Composites in Tabellen eher kompliziert sein sollten.
Schau mal beim Nebula-Projekt. Wenn ich mich recht entsinne, gab es da etwas, wie CompositeTables... Vielleicht hilft dir dass ja weiter: Nebula Project

Grüsse,
Daniel

PS: Das ist jetzt in keinster Weise hilfreich, aber: In JavaFX kann man recht einfach eigenen Content in Tabellenzellen einbinden.

PPS: Hab ich schon mal erwähnt, dass man mit FXCanvas JavaFX ohne Probleme in SWT-Anwendungen einbetten kann? Nachteil ist nur das andere Look-&-Feel

PPPS: Noch eine letzte Bemerkung: SWT und JavaFX teilen sich sogar den selben UI-Thread, d.h. nicht einmal nerviges Zeug á la [c]Platform.runLater(Runnable)[/c] ist nötig!

PPPPS: Das ist alles nur Info am Rande, was du damit anstellst, ist deine Sache...
 

Sno0t

Mitglied
Hi,

Ich danke dir für deine Antwort :)
Ich werde mich mal ein wenig in den von dir geposteten Links einlesen, vielleicht findet sich ja etwas das ich auf meine Anwendung abstrahieren kann.
Bin natürlich für weitere Vorschläge offen, sollte ich was finden bzw. eine Lösung gebastelt bekommen, werde ich das ganze hier posten ^^
 

dzim

Top Contributor
Danke, das ist nett, falls mal wer anders in eine ähnliche Lage kommt. Weitere SWT-spezifische Vorschläge kann ich dir leider nicht liefern.
 

Sno0t

Mitglied
Hallo,

Ich komme in nächster Zeit leider nicht dazu an meinem Projekt weiter zu basteln.
Allerdings habe ich Lösungsansätze gefunden die funktionieren sollten:

Es gibt für die oben genannte Problematik 2 Ansätze.
Nummer 1: einen neuen Listener erstellen, der nach dem Listener-event fragt, und dieses dann entsprechend behandelt.
Als erses den Listener erstellen
Java:
Listener myListener = new Listener() {
      public void handleEvent(Event event) {
        switch (event.type) {
        case SWT.MeasureItem: {
          event.width = 200;
          event.height = 200;
          break;
        }
        }
      }
    };

und anschließend der Table als Listener hinzufügen:

Java:
// Event bei welchem der Listener greift, und der Listener selbst
table.addListener(SWT.MeasureItem, myListener);

Dies sollte funktionieren, konnte es aber leider nicht testen.
Die 2. Möglichkeit (Denke die elegantere) ist es einen der folgenden LabelProvider für die Columns zu nutzen:
OwnerDrawLabelProvider, StyledCellLabelProvider
und dort die Methode "measure()" und ggf. "paint()" überschreiben.
Java:
myColumn.setLabelProvider(new OwnerDrawLabelProvider() {
      @Override
      protected void measure(Event event, Object element) {
        event.setBounds(new Rectangle(event.x, 
            event.y, 
            myBounds.width, 
           myBounds.height));
      }
    });

Wie gesagt, das ist alles noch ungetestet und basiert erstmal nur auf Theorie.
Habe die Sachen allerdings auf verlässlichen Seiten gefunden (Links kommen gleich)
Wenn jemand die Möglichkeit findet es Zeitnah zu testen und Meinungen Preiszugeben, wäre das sehr hilfreich.
Ansonsten werde ich das übernehmen wenn ich an meinem Projekt weiter arbeiten kann.

Für beide Varianten hier die weiterführenden Links:

MultilineCell Java2s

Advanced JFaceTable Vogella
 

dzim

Top Contributor
Danke für die Tipps! Klingt erst mal interessant. Sollte ich noch einmal zu einem SWT-Projekt kommen, versuche ich es mir bis dahin zu merken ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
T ListView in TableCell AWT, Swing, JavaFX & SWT 4
offi Combobox in TableCell AWT, Swing, JavaFX & SWT 1
H JavaFX TableCell mit Buttons AWT, Swing, JavaFX & SWT 1
F TableCell aus TableView holen AWT, Swing, JavaFX & SWT 8
O Zweifarbiger Hintergrund in einer TableCell? AWT, Swing, JavaFX & SWT 4
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
G SWT JAVA Swt Composite übereinanderlegen AWT, Swing, JavaFX & SWT 6
A SWT MouseWheelListener auf Composite beschränken? AWT, Swing, JavaFX & SWT 10
reibi SWT Bild auf Composite zentrieren AWT, Swing, JavaFX & SWT 7
D SWING - Ein Composite scrollen AWT, Swing, JavaFX & SWT 6
lumo SWT Composite Mouse Track Lisetner AWT, Swing, JavaFX & SWT 2
lumo SWT Composite Focus AWT, Swing, JavaFX & SWT 2
A SWT Scrollable Composite innerhalb eines Composites AWT, Swing, JavaFX & SWT 3
J SWT Größe eines Composite mit Gridlayout festlegen AWT, Swing, JavaFX & SWT 2
G SWT Button in Composite vor anderem Button einfügen AWT, Swing, JavaFX & SWT 10
A SWT Auf einem Tabb (FormPage) einzelnes Composite neu zeichnen AWT, Swing, JavaFX & SWT 7
A SWT SWT - Unbekannte Fläche (Objekt) erscheint im Composite AWT, Swing, JavaFX & SWT 6
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
J SWT 4 Objekte auf einem Composite anordnen AWT, Swing, JavaFX & SWT 5
S SWT Composite mit Layout Manager geht nicht AWT, Swing, JavaFX & SWT 4
L SWT Composite klonen AWT, Swing, JavaFX & SWT 2
lumo SWT Absolute position einer Composite/Control AWT, Swing, JavaFX & SWT 5
B SWT Composite neu zeichnen AWT, Swing, JavaFX & SWT 3
M Shell vs. Composite AWT, Swing, JavaFX & SWT 3
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
A SWT Composite bleibt leer AWT, Swing, JavaFX & SWT 7
K Composite Inhalt wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
G Composite - Rand wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 3
7 SWT-Composite für Wizard, Event finden? AWT, Swing, JavaFX & SWT 5
der JoJo [SWT]Meherer Composite's , immer nur eins anzeigen AWT, Swing, JavaFX & SWT 2
T FillLayout und Composite AWT, Swing, JavaFX & SWT 10
C SWT Composite Border im Nachhinein setzen AWT, Swing, JavaFX & SWT 1
I Composite AWT, Swing, JavaFX & SWT 5
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
_user_q Wie den Inhalt vom Spinner auf Integer überprüfen? AWT, Swing, JavaFX & SWT 15
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
H JTabel Inhalt löschen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
ZH1896ZH JavaFX Wie kann ich die Fenstergrösse entsprechend dem Inhalt vergrössern/verkleinern AWT, Swing, JavaFX & SWT 2
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
L JavaFX Pane inklusive Inhalt der Bildschirm Auflösung anpassen AWT, Swing, JavaFX & SWT 13
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
G Menübar anklicken und Inhalt entsprechend wechseln AWT, Swing, JavaFX & SWT 4
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
A BorderLayout "Center" Inhalt wechseln AWT, Swing, JavaFX & SWT 1
D Swing JTable mit Inhalt aus XML-File AWT, Swing, JavaFX & SWT 3
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
E JavaFX JavaFX - MenuItem erstellen aus dem Inhalt einer HashMap AWT, Swing, JavaFX & SWT 1
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
E JavaFX Sehr viel und unterschiedlich Großen Inhalt auf einer "Fläche" ... Umsetzbar ? AWT, Swing, JavaFX & SWT 3
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
JAVAnnik JavaFX Inhalt der TreeCell nicht einrücken AWT, Swing, JavaFX & SWT 1
F AWT Drucken verschluckt inhalt AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
OnDemand Inhalt des Frames ändern AWT, Swing, JavaFX & SWT 4
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
C Swing Anzeigeproblem mit TableModels abhängig von deren Inhalt AWT, Swing, JavaFX & SWT 10
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
N Swing JCombobox - PopupMenu-Inhalt mit KSKB AWT, Swing, JavaFX & SWT 2
N Swing KomponentenHöhe an html-Inhalt anpassen AWT, Swing, JavaFX & SWT 4
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben