# Editor programmieren



## BlubBlub (5. Okt 2010)

Hi,

wenn ich einen kleinen texteditor schreiben will mit den menüpunkten "datei öffnen", "datei speichern",
"drucken" muss ich das alles von hand programmieren?

(ich will dabei java eclipse verwenden.)

ich bin mir nicht sicher, ob ich den begriff framework richtig verstehe, aber gibt es so vorgefertigte "schablonen" bei java wo man im prinzip ein gewisses gerüst schon stehen hat, wie beispielsweise das texteditor fenster mit einigen mustermenüpunkten die man nur noch mit funktionen versehen muss?


----------



## ARadauer (5. Okt 2010)

nein du musst nicht alles von hand programmieren. es gibt natürlich komponenten die du verwenden kannst, wie zb den datei öffnen dialog.
Ich würde das nicht als Rahmen sehen, dass du nur noch mit Funktionen vershen musst, sondern eher als eine Sammlung von Komponenten die du nach deinen Wünsschen zusammenstellen und erweitern kannst.


----------



## Gast2 (5. Okt 2010)

Ich denke du hast noch nie was mit GUI Programmierung gemacht, daum solltest du erstmal klein anfangen.
Wenn du unbedingt das Eclipse Framework benutzen willst: Ist das hier wahrscheinlich am besten.
Eclipse RCP Tutorial

Aber wie gesagt ich denke für den Einstieg ist das Eclipse Framework zu schwer.


----------



## BlubBlub (5. Okt 2010)

ich hab schon ein paar sachen mit GUI programmiert also ganz unwissend bin ich nicht.
hab zwar jetzt nicht riesige projekte damit programmiert aber so ein paar kleinigkeiten, halt
was man im rahmen eine semesters drüber beigebracht bekommt.
natürlich fehlt mir darin deshalb dann auch noch einiges an erfahrung.
ich wollte aber jetzt mal probieren halt etwas komplexeres damit  zu programmieren.
und deshalb hab ich auch bewusst mich dafür entschieden die menüpunkte "datei öffnen",
"datei speichern" und "datei drucken" mit aufzunehmen.

ich weiß, dass man so einen editor sich selbst programmieren kann indem man die entsprechende swing objekte verwendet.
also so ein fenster mit einem textfeld und den untermenüs könnte ich erstellen. mit den funktionen für "datei öffnen", "datei speichern" und "datei drucken" versehen damit hab ich keine erfahrung.
aber laut dem beitrag von ARadauer müsste es anscheinend ne funktion dafür in irgendeiner swing klasse dafür geben. vielleicht könnt ihr mir einen tipp geben in welcher. ich werd auch mal gleich selbst danach schauen. 

eine andere möglichkeit wäre gewesen ein programm zu verwenden welches automatisch den quellcode generiert indem man die enstprechenden graphischen objekte einfügt, aber dabei programmiert man ja nichts selbst also ergibt das keinen wirklichen lerneffekt darum wollt ich von solchen programmen eigentlich abstand nehmen.

ich hatte halt gedacht dass es für solche oft wiederkehrenden programmkonstrukte auch schon gewissen fertigen code gibt, den softwareentwickler als basis verwenden und ihn an ihre bedürfnisse anpassen.


----------



## Onkel Hatti (5. Okt 2010)

Naja, fast...

mit

```
javax.swing.JFileChooser
```

gibt es einen fertigen Dateiauswahldialog. Damit bekommt man aber nur die Datei im Dateisystem, die man laden oder speichern möchte. Den Inhalt der Datei hat man dann aber noch nicht. Das laden/speichern des Textes muss man dann noch selber machen.

IBM hatte vor Jahren mal "Visual Age for Java" (VAJ) im Programm. Damit habe ich angefangen, Java zu lernen. Ich hatte keine Ahnung, wie das geht, gerade die GUI Programmierung, ich kam damals aus dem Turbo Pascal - Lager. Mit VAJ konnte man ganze Anwendungen zusammenklicken, ein echtes "Rapid Application Development". Der erzeugte Code war zwar aus heutiger Sicht durchaus als grauenvoll zu bezeichnen, aber dadurch habe ich gelernt, wie GUI Code erzeugt wird, wie sich manuelle Veränderungen im Code visuell auswirken, etc. Und das GridBagLayout ist ohne GUI esigner nur schwer handlebar...

Hatti


----------



## Gast2 (5. Okt 2010)

Wie du in deinem Beitrag mit den Frameworks sicher gelesen hast sind Frameworks nur Werkzeuge und Ansammlungen von Klassen die du verwenden kannst. Was die GUI und Widgets machen sollen musst du schon selber bestimmen. Mach das Tutorial einfach durch dann siehst du doch wie es läuft ...


----------



## Gastredner (5. Okt 2010)

Mit dem JFileChooser existiert eine Komponente, die dir bereits den Aufwand der Dateiauswahl abnimmt. Laden und Speichern lassen sich damit relativ einfach erledigen:

```
JFileChooser erzeugen
Laden- bzw. Speichern-Dialog anzeigen lassen
Hat der Benutzer OK gedrückt und auch eine Datei ausgewählt?
Wenn ja:
	Existenz der Datei prüfen und sie ggf. anlegen
	Passenden OutputStream öffnen und Inhalt der JTextArea mithilfe des Streams in die Datei schreiben
	// bzw. beim Laden ein InputStream und die Datei auslesen
	Stream schließen
```
Effizienter ist es dabei, wenn du nicht bei jedem Aufruf der Speicher- bzw. Lade-Routine erneut einen JFileChooser erzeugst, sondern nur ein einziges Mal (du ihn also als Klassenvariable anlegst und z. B. im Konstruktor initialisierst). Angenehmer Nebeneffekt: Bei mehrfachem Aufruf "merkt" sich der JFileChooser das zuletzt vom Benutzer ausgewählte Verzeichnis, was die Bedienung für eben jenen angenehmer gestaltet.

Drucken wird in der Insel beschrieben: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 17.8 Drucken (hab ich mich selbst nie näher mit beschäftigt, daher nur der Verweis auf die Insel).


----------



## Gast2 (6. Okt 2010)

Warum redest ihr eigentlich alle von Swing? Der TO hat nie erwähnt dass er Swing benutzen will ...


----------



## Gastredner (6. Okt 2010)

Bitte...

```
FileDialog erzeugen
Dialog anzeigen lassen
Ist der Rückgabewert des Dialogs ungleich null?
Wenn ja:
	Aus dem Rückgabe-String ein File erstellen, Existenz der Datei prüfen und sie ggf. anlegen
	Passenden OutputStream öffnen und Inhalt des Text-Widgets mithilfe des Streams in die Datei schreiben
	// bzw. beim Laden ein InputStream und die Datei auslesen
	Stream schließen
```
:bae:
Jetzt sein wir aber mal ehrlich: Wie viele beginnen GUI-Entwicklung mit SWT statt mit Swing? Und jetzt nenn bitte nicht AWT, das ist keine Alternative mehr.


----------



## Tomate_Salat (6. Okt 2010)

Gastredner hat gesagt.:


> Jetzt sein wir aber mal ehrlich: Wie viele beginnen GUI-Entwicklung mit SWT statt mit Swing? Und jetzt nenn bitte nicht AWT, das ist keine Alternative mehr.



... oder gleich mit RCP oder RAP :lol:


----------



## Gast2 (6. Okt 2010)

Er hat oben genannt er will "java eclipse" verwenden was auch immer das heißen mag ...
denke mal er meint damit schon eher einen Eclipse RCP


----------



## Tomate_Salat (6. Okt 2010)

... oder er will Eclipse einfach als IDE benutzen ;-)


----------



## BlubBlub (7. Okt 2010)

danke für die antworten, hab mir in den letzten beiden tagen auch mal durchgelesen was in "java ist auch eine insel" darüber steht.
ich werd jetzt einfach mal versuchen das zu programmieren =)


----------



## dzim (9. Okt 2010)

Ah... er hat sich wohl doch eher für Swing entschieden...

Wie auch immer, ein andere Thread der dich interessieren könnte war der hier:
http://www.java-forum.org/awt-swing-swt/106865-macht-besten-gui.html

Ich hab auch erst mit Swing angefangen und bin dann auf SWT und Eclipse RCP (beides in einem "Rutsch") umgestiegen.
Wenn du keine Wunder von deiner Anwendung erwartest, geht das alles recht einfach.

Einzig das Drucken habe ich bis heute noch nicht so recht hinbekommen (aber zugegebenermaßen auch lange schon nicht mehr probiert...)


----------



## Tomate_Salat (9. Okt 2010)

Naja, ich bin auch immer mal wieder abgetrieftet und habe mir RCP angeschaut. Aber iwie sagt mir das nicht zu :-/ und SWT (ohne RCP) ... da hab ich das Gefühl: da fehlt die hälfte und bin wieder bei Swing gelandet.


----------



## Gast2 (9. Okt 2010)

Tomate_Salat hat gesagt.:


> Aber iwie sagt mir das nicht zu :-/



Und was genau?


----------



## Gastredner (9. Okt 2010)

Tomate_Salat hat gesagt.:


> Naja, ich bin auch immer mal wieder abgetrieftet und habe mir RCP angeschaut. Aber iwie sagt mir das nicht zu :-/


RCP hat auch durchaus seine Schattenseiten (unvollständige Dokumentation, dadurch teils schwer vorhersehbares Verhalten; hohe Komplexizität), aber ich persönlich finde den Ansatz gut und auch relativ gelungen umgesetzt, zumindest soweit ich das bisher bewerten kann.



> und SWT (ohne RCP) ... da hab ich das Gefühl: da fehlt die hälfte und bin wieder bei Swing gelandet.


Bei mir sieht es eher anders aus: Ich habe das Gefühl, Swing könnte einiges von SWT gut vertragen. Die Sammlung von LayoutManagern ist kleiner, aber durchdachter, für viele wichtige Anwendungsfälle existieren bereits vorgefertigte Lösungen (besonders zusammen mit JFace - man hat eine Vielzahl von Dialogen und ein recht einfaches Wizardsystem) und das Databinding-Framework kann zwar nervig sein, funktioniert nach einer kurzen Eingewöhnungsphase allerdings doch schon ziemlich gut.
Allerdings habe ich so einige Elemente von SWT noch nicht richtig benutzt, daher kann sich dieser Eindruck natürlich noch ändern. Bisher sieht es allerdings nicht danach aus, und ich bin bereits gespannt, wie sich die Lage mit der offiziellen Freigabe von XWT und den stylebaren Komponenten weiter entwickeln wird.


----------



## Daniel_L (10. Okt 2010)

Du kannst alternativ zu Eclipse auch NetBeans verwenden, das - (nicht nur) meiner Meinung nach - intuitiver für den Einstieg ist.

Einen Editor erstellst du dann wahlweise auf Basis einer RCP: NetBeans
Oder aber du nutzt NetBeans als IDE und erstellst deinen Editor mit dem GUI-Builder, eine Übersicht hier: Java and JavaFX GUI Application Learning Trail - NetBeans Tutorials, Guides and Articles

Gute Video-Casts dazu hier: NetBeans GUI Builder: Getting Familiar

Ich persönlich finde NetBeans insgesamt viel intuitiver und besser bedienbar, aber auch die Tutorials und Ressourcen auf der Homepage ist wesentlich übersichtlicher gestaltet als bei eclipse.org. Wenn du also noch keine Erfahrung mit Eclipse hast, dann steig mit NetBeans ein. Mittlerweile ist NetBeans auch so gereift, dass man getrost dabei bleiben kann und nicht, wie früher immer gerne empfohlen, auf Eclipse umsteigen muss.


----------



## Gast2 (10. Okt 2010)

Daniel_L hat gesagt.:


> Oder aber du nutzt NetBeans als IDE und erstellst deinen Editor mit dem GUI-Builder, eine Übersicht hier: Java and JavaFX GUI Application Learning Trail - NetBeans Tutorials, Guides and Articles



Wenn ich seh was der GUI Builder für Code erzeugt wird mir schlecht. Vor allem wieviel Leute schon hier Probleme hatten, weil Sie danach ein eigenes Panel ausführen wollte und das painten nicht mehr geklappt hat.


----------



## Gast2 (10. Okt 2010)

Gastredner hat gesagt.:


> RCP hat auch durchaus seine Schattenseiten (unvollständige Dokumentation, dadurch teils schwer vorhersehbares Verhalten; hohe Komplexizität), aber ich persönlich finde den Ansatz gut und auch relativ gelungen umgesetzt, zumindest soweit ich das bisher bewerten kann.



Unvollständige Dokumentation??? Bei welchem Thema?
Bei einem großen und mächtigen Framework ist die Komplexität je tiefer man reingeht immer hoch. Ist bei Spring, Hibernate und Co genauso. Aber das E4 wird deutlich besser und einfacher.
Wenn du für Swing ein ganzes Framework bereitstellen willst wird es auch kompliziert werden.



Gastredner hat gesagt.:


> Allerdings habe ich so einige Elemente von SWT noch nicht richtig benutzt, daher kann sich dieser Eindruck natürlich noch ändern. Bisher sieht es allerdings nicht danach aus, und ich bin bereits gespannt, wie sich die Lage mit der offiziellen Freigabe von XWT und den stylebaren Komponenten weiter entwickeln wird.



Ja beim RCP ist schon alles in einem Framework bei Swing muss man sich mehrere Frameworks und libs zusammen suchen. Wie z.B. gute LayoutManager, DockingFramework,Databinding. Dafür kann man Swing leichter eigene Komponenten "stylen".
Aber ich finde SWT/JFace hatte bis jetzt alle Komponenten die ich benötigt habe und die lassen sie auch erweitern.


----------



## Gastredner (10. Okt 2010)

SirWayne hat gesagt.:


> Unvollständige Dokumentation??? Bei welchem Thema?


Hast du dir mal die API-Docs angesehen? Die bestehen oftmals nur aus einem einfachen Satz als Klassenbeschreibung, dazu vielleicht ein Satz pro Methode.


----------



## Gast2 (10. Okt 2010)

Ja dann zeig mir eine...


----------



## Tomate_Salat (10. Okt 2010)

Gastredner hat gesagt.:


> Bei mir sieht es eher anders aus:



Hast mich falsch verstanden (habs aber auch nicht toll formuliert). Ich meine: SWT *ohne* RCP, da hab ich die Gefühl, dass was fehlt ;-).


----------



## Gast2 (10. Okt 2010)

Tomate_Salat hat gesagt.:


> Ich meine: SWT *ohne* RCP, da hab ich die Gefühl, dass was fehlt ;-).



Würde eher sagen SWT ohne JFace da fehlt was.

SWT/JFace sind vom Funktionsumfang mindestens so gut als Swing, bei manchen Sachen sogar weiter LayoutManager,Widgets, Databinding etc.


----------



## Daniel_L (11. Okt 2010)

SirWayne hat gesagt.:


> Wenn ich seh was der GUI Builder für Code erzeugt wird mir schlecht.



Deswegen ist der Code-Block ja standardmäßig zusammengeklappt, damit man diese Probleme erst mal nicht hat! :toll:


----------



## Gast2 (11. Okt 2010)

Daniel_L hat gesagt.:


> Deswegen ist der Code-Block ja standardmäßig zusammengeklappt, damit man diese Probleme erst mal nicht hat! :toll:



Ja für Anwendungen daheim... Aber in einer Firma gibt es Code Review usw. und spätestens da sollte der Code übersichtlich sein damit man ihn auch bei Bedürfnissen erweitern kann.


----------



## Daniel_L (11. Okt 2010)

Der automatisch generierte Code von NetBeans sieht ja vor allem beim "Free Layout" etwas unübersichtlich aus, wenn man also alle Komponenten beliebig platzieren kann. Bei den anderen, gängigen Layouts ist der automatisch generierte Code sauber und aufgeräumt.


----------

