RCP Eclipse: Speichern von Spaltenbreiten

musiKk

Top Contributor
Hallo,

durch Internationalisierung und unvorhersehbare Nutzereingaben passiert es häufig, dass zunächst eingestellte Standardspaltenbreiten in Tabellen (JFace TableViewer und TreeViewer werden verwendet) zu breit oder zu schmal sind. Auch auf verschiedenen Betriebssystemen sind die Differenzen groß.

Daher habe ich mir überlegt, die Spaltenbreiten abzuspeichern und beim Erzeugen der Tabelle wieder zu laden. Gibt es dafür schon eine Möglichkeit? Ich habe bisher nichts gefunden. Wo genau gespeichert wird - ob in IMemento oder IDialogSettings - ist mir persönlich erstmal egal. Hauptsache, es geht.

Wenn es da nichts gibt, werde ich mir da wohl oder übel selbst was überlegen müssen...

Gruß
mK
 

Wildcard

Top Contributor
Wenn es ein Dialog ist nimmst du IDialogSettings, wenn es eine View oder Editor ist nimmst du IMemento, du liegst also goldrichtig.
 

musiKk

Top Contributor
Ich sehe schon, die Frage war zu undeutlich. Wie gesagt: Ob ich Memento oder DialogSettings nehme, ist mir ziemlich egal. Der Fokus liegt auf: Gibt es dafür schon eine Möglichkeit? Am besten wäre ja etwas, dem ich einfach nur eine Speichermöglichkeit, eine Art Table/Tree-ID und den Table/Tree selbst hinwerfe und der Rest geht von alleine.

Ich habe schon einmal testweise einen Prototypen erstellt, der von Tree-/TableViewer abgeleitet und beim Dispose die Spalten ausliest und in DialogSettings abspeichert. Das Wiederherstellen geschieht noch mehr oder weniger manuell, wobei daran evtl. noch etwas geschraubt werden könnte. Alles in Allem etwas unschön. Viel Code wird auch dupliziert, weil Table und Tree keine gemeinsame Hierarchie haben, über die ich an die Spalten komme (selbes für die entsprechenden Viewer). Füge ich da nun noch das Memento hinzu (wofür ich eigentlich keinen Bedarf sehe... außer dem Namen ändert sich ja nicht viel...) wird das noch mehr.

Was mich am meisten stört ist natürlich, dass beim geringsten Fehler der Table/Tree nicht angezeigt wird und dass für mich relativ schwer abzuschätzen ist (wie bei jedem Framework), ob das hundertprozentig plattformübergreifend ist.
 

Wildcard

Top Contributor
Hmm, irgendwie verstehe ich dein Problem nicht so richtig. Du kannst in den Dialog Settings zb doch generisch key value Paare ablegen. Du musst doch also nur die Spaltennummer als Key verwenden und die Breite als Value dazu ablegen. Beim starten lässt du dir die Spaltenbreite dann wieder geben und wendest sie auf die Columns an.
Wenn dich duplizierter Code stört kannst du ja eine Klasse schreiben die das für dich tut, oder TreeViewer und TableViewer subclassen und der abgeleiteten Klasse wahlweise ein Memento oder IDialogSettings mitgeben.
 

musiKk

Top Contributor
Ok, passt schon. Aus dem bisher gesagten entnehme ich, dass es wohl noch keine vorgefertigte Lösung gibt. Ich habe auch die eine vorgeschlagene Variante genommen: zwei Klassen, die von Tree- und TableViewer ableiten.

Mit dupliziertem Code meinte ich eigentlich folgendes: Ich habe z. B. eine Methode, die die Spaltenbreiten wiederherstellt:

Java:
public void restorePreviousWidths() {
	Table table = getTable();
	TableColumn[] columns = table.getColumns();

	if (previousWidths.length != columns.length) {
		return;
	}

	for (int i = 0; i < columns.length; i++) {
		TableColumn col = columns[i];
		int width = previousWidths[i];

		col.setWidth(width);
	}
}

Das gleiche gibts nochmal exakt so für Tree, nur dass [c](get)Table[/c] durch [c](get)Tree[/c] und [c]TableColumn[/c] durch [c]TreeColumn[/c] ersetzt wird. Tree/Table kommen halt direkt von Composite und Tree-/TableColumn von Item. Vielleicht bin ich bzgl. Duplikation auch zu mäkelig - ich meide sie wie die Pest - darum hatte ich auch nach einer vorgefertigten Lösung gesucht.
 

code404

Aktives Mitglied
Ich finde es auch leidlich das solche selbstverständlichen Features mit "so" viel Aufwand programmiert werden müssen.
Deswegen habe ich mir schon vor langen eine Lösung gesucht die ich möglichst einfach modifizieren kann.
Die wird dann überall wo eine Tabelle benötigt wird hin kopiert und angepasst:
Also ich "verhackstückel" das meistens gleich mit im Labelprovider:
Java:
 public static  class CommentLabelProvider implements ITableLabelProvider 
    {
    	
    	static final String MESSAGE = "Message";
    	static final String DATE = "Date";
    	static final List<String> columns = Arrays.asList(new String[]{ DATE, MESSAGE});
     	static final Integer[] columnWidth = new Integer[]{	30,	100};
    	
    	public static void makeColumns(TableViewer tableViewer, TableColumnLayout tableColumnLayout)
    	{
    		IDialogSettings settings = MyPlugin.getDefault().getDialogSettings();
    		for(int i=0;i<columns.size();i++)
    		{
    			int width = columnWidth[i];
    			try
    			{
    				width = settings.getInt(CommentsTab.class.getSimpleName()+ "_TABLE_COLUMN_WIDTH_" + columns.get(i));
    			}catch(NumberFormatException e)
    			{}
    		    TableColumn tableColumn = new TableColumn(tableViewer.getTable(), SWT.LEFT, i);
                tableColumn.setText(columns.get(i));
                tableColumnLayout.setColumnData(tableColumn, new ColumnWeightData(width, width, true));
                tableColumn.addControlListener(new ControlAdapter()
    			{
    				@Override
    				public void controlResized(ControlEvent e)
    				{
    					TableColumn parent = (TableColumn) e.getSource();
    					IDialogSettings settings = MyPlugin.getDefault().getDialogSettings();
    					settings.put(CommentsTab.class.getSimpleName()+ "_TABLE_COLUMN_WIDTH_" + parent.getText(), parent.getWidth());
    				}
    			});
    		}
    	}
		@Override
		public String getColumnText(Object element, int columnIndex)
		{
			if(element instanceof Comment)
			{
				if(columnIndex==columns.indexOf(MESSAGE))
					return ((Comment)element).getContent();
				else if(columnIndex==columns.indexOf(DATE))
					return ((Comment)element).getDate();
			}
			return "";
			
		}
...
}
So muss ich nur die Namen der Spalten und die getText-Methode ändern.
 

code404

Aktives Mitglied
Mhh Gegenfrage: Wieso nicht ;-)
Der LabelProvider muss doch sowieso wissen wie viele Spalten es gibt. Also war es für mich logisch auch die Spalten dort anzulegen.
Gibt es einen besseren Weg? Dann immer her damit!
Wie machst du das denn?
 
G

Gast2

Gast
Der LabelProvider muss doch sowieso wissen wie viele Spalten es gibt. Also war es für mich logisch auch die Spalten dort anzulegen.
Gibt es einen besseren Weg? Dann immer her damit!
Wie machst du das denn?

Wieso muss der LabelProvider die Anzahl der Spalten wissen?

Hab mir noch keine Gedanken darüber gemacht, aber ich denke ich würde sowas eventuell im TableViewerColumn oder so machen!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Simple Action beim Speichern in Eclipse... Plattformprogrammierung 2
N Eclipse RCP: Perspektiven speichern Plattformprogrammierung 6
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
R Eclipse Bundles Plattformprogrammierung 2
Robertop RCP Command in bereits bestehendes Eclipse-Menü einbauen Plattformprogrammierung 4
T Java Projekt läuft nur in Eclipse Plattformprogrammierung 6
M Eclipse Plugin PreferencePage BooleanFieldEditor Plattformprogrammierung 1
F OSGi Plugin unter Eclipse arbeitet anders als wenn veröffentlicht Plattformprogrammierung 2
D RCP P2-Repository für Eclipse-Plugins Plattformprogrammierung 0
M Debuging in Eclipse Annotations Processor Plattformprogrammierung 0
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
L0MiN Wie kann ich ein Klassendiagramm aus Eclipse heraus erstellen? Plattformprogrammierung 5
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
feinperligekohlensaeure Eclipse Workspace gemeinsam Nutzen -> keine .project Datei Plattformprogrammierung 1
F Eclipse Build Path auf benötigte Projekte Plattformprogrammierung 4
B Daten von Eclipse extern sichern Plattformprogrammierung 2
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
VfL_Freak [Eclipse] Fehleranzeige im Reiter "Problems" Plattformprogrammierung 1
S Errors in workspace bei eclipse Plattformprogrammierung 3
T eclipse bietet keine META-INF an Plattformprogrammierung 1
N Eclipse wo starten Plattformprogrammierung 6
A Eclipse schließt einfach ohne Fehlermeldung Plattformprogrammierung 4
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
A RCP Eclipse e4 und Injection-Contexts Plattformprogrammierung 0
K Eclipse fährt nicht mehr hoch. Metadatendatei schuld? Plattformprogrammierung 7
C [Eclipse RCP E4]InjectionException: no actual value was found for the argument "MDirtyable" Plattformprogrammierung 8
T Eclipse Eigenschaften hinzufügen Plattformprogrammierung 2
M RCP [Eclipse RCP 3.4] ViewTab Kontextmenu "Alle schließen" Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
S Verschieben des Verzeichnis .eclipse aus Userprofile Plattformprogrammierung 3
A RCP Kann kein Eclipse 4 Projekt anlegen Plattformprogrammierung 0
S RCP Exportiertes RCP Produkt lädt Datei nicht, bei Start aus Eclipse wird Datei jedoch gefunden Plattformprogrammierung 6
G Eine Library in Eclipse zur Verfügung stellen Plattformprogrammierung 14
Gregorrr Eclipse RCP Product Build-Nummer + Jenkins Plattformprogrammierung 6
R Einfaches Eclipse-Plugin-Beispiel funktioniert nicht Plattformprogrammierung 5
H OSGi OSGi + Logback + slf4j - Eclipse Run Configuration Plattformprogrammierung 7
C plugin development environment eclipse Plattformprogrammierung 4
R RCP Commands nutzen / org.eclipse.ui.file.save Plattformprogrammierung 7
O Installiere externe Methode "containsNone" in Eclipse Plattformprogrammierung 2
M Keybinding in Eclipse Plugin Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
B Eclipse Probleme mit build Plattformprogrammierung 8
H Keine Hilfe/API mehr in Eclipse Juno? Plattformprogrammierung 4
B Neue SuppressWarning in Eclipse Juno Plattformprogrammierung 6
B Eclipse Property Page Plattformprogrammierung 6
B Eclipse PreferencePage Plattformprogrammierung 3
B Eclipse Plugin Einstellungsleiste Plattformprogrammierung 2
B Birt-Previewer über Eclipse Plattformprogrammierung 14
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
R Eclipse RCP Tabellen-View (Anfängerfrage) Plattformprogrammierung 3
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
schalentier Eclipse Sourcecode Plattformprogrammierung 4
A Eclipse undo/redo button reagiert nicht auf Änderungen in der OperationHistory Plattformprogrammierung 5
P Eclipse M2_REPO (NON MODIFIABLE) Plattformprogrammierung 8
B Eclipse: Contextmenu id erhalten? Plattformprogrammierung 9
H Datei in eclipse wird nicht erkannt Plattformprogrammierung 3
O Neues Tastenkürzel für Eclipse Editorfenster registrieren Plattformprogrammierung 2
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
Madlip RCP eclipse.ui.bindings (Key-Problematik) Plattformprogrammierung 2
S Eclipse vs. JavaMail vs. Ubuntu vs. Windows Plattformprogrammierung 3
M eclipse führt applikationen nicht mehr aus Plattformprogrammierung 6
S Eclipse: Auf CTRL-C/CTRL-V im Package Explorer? Plattformprogrammierung 4
M Eclipse und Hilfen Plattformprogrammierung 5
G Eclipse buggt rum!!! Plattformprogrammierung 4
B Eclipse RCP und Java 7 Plattformprogrammierung 7
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
T RCP Eclipse RCP: Wo/wann im Plugin ist workbench initialisiert? Plattformprogrammierung 14
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
M RCP [Eclipse RCP] Feature Export und "Fehler"... Plattformprogrammierung 3
P Eclipse speichert keine Änderungen Plattformprogrammierung 5
M Eclipse - Dokumentation nicht über das Internet benutzen Plattformprogrammierung 3
C Eclipse Plugin NoClassDefFoundError Plattformprogrammierung 4
E org.eclipse.ui.dialogs.ListSelectionDialog erzeugt ClassNotFoundException zur Laufzeit Plattformprogrammierung 4
M Eclipse Plugin Entwicklung - NoClassDefFoundError Plattformprogrammierung 10
C RCP Verständnisfrage Eclipse/Equinox Plattformprogrammierung 4
D eclipse-RCP von der Konsole baut nicht Plattformprogrammierung 3
L RCP Eclipse Popupmenu im PackageExplorer erweitern? Plattformprogrammierung 7
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
S (OSGI - EQUINOX) Welche Eclipse IDE? Plattformprogrammierung 3
C Pdf in jar datei einbinden mit eclipse Plattformprogrammierung 23
G neuer branch in SVN mit Eclipse Plattformprogrammierung 6
F RCP eclipse rcp ohne eclipse? Plattformprogrammierung 15
dzim RCP Eclipse Provisioning Plattformprogrammierung 3
G RCP Abhängigkeiten von Eclipse Plugins Plattformprogrammierung 9
K Eclipse RCP, EMF, Hibernate Problem Plattformprogrammierung 7
B RCP eigenes Eclipse Plugin wird nicht aufgelöst Plattformprogrammierung 7
T Eclipse Helios XMLUnit importieren Plattformprogrammierung 6
R Verwendung pdfbox in Maven-Projekt in Eclipse Plattformprogrammierung 3
lumo RCP wechseln der Font von Eclipse per code Plattformprogrammierung 10
lumo RCP Eclipse internationalisierung Plattformprogrammierung 5
jemandzehage Kurze Fehlernachricht beim starten in Eclipse Plattformprogrammierung 5
A RCP java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter Plattformprogrammierung 7
P Wie bekomme ich ICompilationUnit aus dem event? bei Eclipse-Plugin Plattformprogrammierung 3
Rudolf External Libs dauerhaft in Eclipse einbinden Plattformprogrammierung 3
G RCP Eclipse UI Forms Plattformprogrammierung 10
X Datei in einem Eclipse Projekt über Plugin zugreifen Plattformprogrammierung 2
P Eclipse Help: Wie Links zu anderer Hilfeseite setzen ? Plattformprogrammierung 5
F Eclipse EMF Modelltransformation Plattformprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben