# Datei öffnen Dialog modifizieren



## Guayg88 (8. Jul 2014)

Hi Leute, 

ich bin Neuling in der Java Entwicklung und habe einen Standard "Datei öffnen" Dialog erstellt, zu sehen im Anhang, an dem ich gerne etwas verändern möchte. (Aus Eclipse heraus sieht der Dialog aus wie in Anhang "Datei öffnen Eclipse")
Auf der linken Seite sind die Schaltflächen "Zuletzt verwendet", "Desktop", "Eigene Dokumente", "Computer" und "Netzwerk" zu sehen. 
Nun meine Frage, kann mir jemand sagen wie ich diese Schaltflächen auf der linken Seite verändern bzw. ersetzen kann? Beispielsweise hätte ich gerne anstatt der Schaltfläche "Netzwerk" eine eigene Schaltfläche mit eigener Bezeichnung mit der ich eine Aktion z.B. ein Popup ausführen kann. 

Ich hoffe ihr könnt mir weiterhelfen und bin für jeden Tipp sehr dankbar.

Grüße
Guayg88


Der Code zum Aufrufen des Dialogs ist folgender:


```
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;

import javax.swing.JFileChooser;

public class OeffnenDialogClass {

	public static void off(){
	        final JFileChooser chooser = new JFileChooser("Verzeichnis wählen");
	        chooser.setDialogType(JFileChooser.OPEN_DIALOG);
	        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
	        final File file = new File("/home");

	        chooser.setCurrentDirectory(file);

	        chooser.addPropertyChangeListener(new PropertyChangeListener() {
	            public void propertyChange(PropertyChangeEvent e) {
	                if (e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
	                        || e.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
	                    final File f = (File) e.getNewValue();
	                }
	            }
	        });

	        chooser.setVisible(true);
	        final int result = chooser.showOpenDialog(null);

	        if (result == JFileChooser.APPROVE_OPTION) {
	            File inputVerzFile = chooser.getSelectedFile();
	            String inputVerzStr = inputVerzFile.getPath();
	            System.out.println("Eingabepfad:" + inputVerzStr);
	        }
	        System.out.println("Abbruch");
	        chooser.setVisible(false);
	    }

	    
	    public static void main(String[] args) {
	        off();
	}

}
```


----------



## turtle (8. Jul 2014)

Ich möchte dir nicht zu nahe treten, aber als Anfänger ist das nicht so einfach.

Zunächst ist es so, das der Dialog mit Absicht so aussieht, daher Standarddialog. Deine Benutzer werden "überrascht" reagieren, wenn der erwartete Dialog plötzlich anders aussieht.

Weiterhin ist Swing in Prinzip tot und wird nicht weiter entwickelt. Das neue GUI-Framework heisst JavaFX.

Aber, wenn du trotzdem den Dialog anpassen möchtest, schau mal hier.


----------



## Anti-Banane (8. Jul 2014)

@turtle
ach ... echt ? dafür hätte ich dann gerne mal n beleg sowie den teil im sun-tutorial bezüglich FX


----------



## Tobse (8. Jul 2014)

Anti-Banane hat gesagt.:


> @turtle
> ach ... echt ? dafür hätte ich dann gerne mal n beleg sowie den teil im sun-tutorial bezüglich FX



Da muss ich auch nachhaken. Swing tot? Und wie soll ich denn mit JavaFX, welches als Framework für Internet-Anwendungen gedacht ist, GUIs für einen Desktop-Rechner entwickeln?


----------



## knilch (8. Jul 2014)

> .... GUIs für einen Desktop-Rechner entwickeln?


Funktioniert mit JavaFX ganz prima. ;-)


----------



## turtle (8. Jul 2014)

@Anti-Banane

Es wundert mich, das du von Sun sprichst, wo doch Sun aufgekauft worden ist.

Somit kann ich keine Sun-Tutorials nennen. Ich kann aber folgende Zeilen von Oracle zitieren (Quelle)

[EDIT]6. Is JavaFX replacing Swing as the new client UI library for Java SE?
Yes. However, Swing will remain part of the Java SE specification for the foreseeable future, and therefore included in the JRE. While we recommend developers to leverage *JavaFX APIs as much as possible when building new applications*, it is possible to extend a Swing application with JavaFX, allowing for a smoother transition.[/EDIT]


----------



## Anti-Banane (9. Jul 2014)

mit dem sun-tut mein ich das hier : The Java™ Tutorials
der link bezüglich FX leitet allerdings extern hierhin weiter : Redirecting... was wiederum auf Client Technologies: Java Platform, Standard Edition (Java SE) 8 Release 8 umleitet
außerdem : die von dir gelinkte "erklärung" ist lediglich aussicht des FX selbst ... ich bin erlich gesagt zu faul mir die changelogs der VM durchzustöbern und überlass es gerne dir uns die entsprechende zeile zu zitieren in der auf FX hingewiesen wird
mir fällt da nämlich nur spontan ich glaub 7u10 oder wann das war ein wo halt FX automatisch mit installiert wurde was ja irgendwann in die normale VM integriert wurde
davon das man aber von Swing abstand nehmen soll habe ich bisher in den eigentlichen changelogs zur JRE noch nicht gefunden ...


--------
EDIT

Wenn ich mir mal so das "get started" 3 Hello World, JavaFX Style (Release 8) angucke erkenn ich hier schon wieder den GRößTEN Fehler den Sun schon mal bei Swing begangen hat und Oracle ihn bei FX wiederholt : [c]extends Application[/c]

NEIN , NEIN , NEIN und nochmals NEIN

sorry ... aber ich kann es einfach nicht glauben ...
ich verweise hier mal an das schöne posting : "warum man NICHT extends JFrame nutzt"
und jetzt will uns oracle sowas auch noch als "guten stil" verkaufen ... um mal das wort vorschreiben nicht zu gebrauchen ?
das ist so der grund weshalb ich mich schlicht und einfach weigern würde bei diesem schrott mit zu machen ... und wie Tobse schon so schön schrieb : "Und wie soll ich dann mit JavaFX, [...], GUIs für einen Desktop-Rechner entwickeln?"
DIE frage ist bei DER struktur aber mal sowas von berechtigt und sollte man eigentlich oracle stellen : "Warum wiederholt ihr einen so schweren Konzeptfehler des vorherigen Systems das dieses hier eigentlich ablösen soll ?"


da bleib ich lieber bei swing ... das läuft dann wenigstens auch noch problemlos auf den XP-kisten meiner leute wo das system mehr als java6 einfach nich bringt


----------



## Anti-Banane (9. Jul 2014)

leider doppel-post da edit nicht mehr möglich



so ... ich hab mich jetzt mal noch n bissl weiter durch das FX-tut gegraben ...
öhm sorry ... das hat für mich jetzt erlich gesagt nicht mehr wirklich viel mit dem "programmieren einer gui" zu tun
sicher, es macht vieles einfacher und es ist nicht mehr so starr komplex aufgebaut wie swing ...

ABER : einen möchte-gern-browser nach-implementieren nur um diesen dann mit xml vollzustopfen durch das FX letzten endes ne gui zusammenklebt ... erinnert dann schon wieder sehr stark an web-design was der aussage von Tobse wieder näher kommt
und es ist sicherlich KEIN fortschritt was GUIs angeht

klar ... soweit ich das tut verstanden habe kann ganz einfach z.b. aus seinem web-frontend ne FX-app machen ...
SORRY ... swing already did it

ich mein, klar, auch wenn das HTML-rendering von swing ziemlich schlecht aussieht und mit sicherheit auch noch nach einem ur-alt-standard läuft ... aber das gibt es schon ... da ist FX für mich keine "neu-erfindung" sondern lediglich "auslagern in xml"

ich weis zwar nicht ob, aber ich wette es gab oder gibt sogar tools die aus ner xml auch swing-guis bauen können ... denn mehr macht FX letzten endes auch nicht

wo die basis allerdings ist ... ob beim alten schwerfällig awt mit hard-nodes oder ob dann doch swing oder swing-like n draw in nem frame das ganze erledigt ... ich will mir gar nicht erst die mühe machen das rauszubekommen´


um es kurz zu fassen : sicher wird FX dem einen oder anderen der vllt grade erst aus der web-entwicklung kommt gui-design erleichtern ... oder "alten hasen" neue möglichkeiten eröffnen ... aber so großkotzig wie es oracle mal wieder ankündigt nach dem motto "es wird der neue standard" ... sorry dudes ... das isses nich ... es ist in meinen augen höchstens ne schnike erweiterung zu swing ... ersetzt dieses aber nicht (zu mal wie gesagt ich gar nicht wissen will was da unter der haube abgeht)

zusätzlicher nachteil zu swing den ich hier sehe : da FX als "lib/framework" konzipiert ist > zusätzlicher overhead der so bei swing nicht auftauchen würde
hier wurde also mal wieder am falschen ende gespart (wobei heutige system da keinen all zu großen performance-unterschied machen sollten)


----------



## Guayg88 (9. Jul 2014)

@Turlte, danke für die Antwort und den Link! 

Ja das kann ich verstehen. Ich möchte nicht unbedingt das gesamte Layout und den gesamten Dialog neu erstellen, sondern lediglich einen der besagten Buttons durch einen eigenen ersetzen. Gibt es da keine Möglichkeit den Dialog zu bearbeiten ohne ihn komplett neu entwerfen und erstellen zu müssen?


----------



## Tobse (9. Jul 2014)

Guayg88 hat gesagt.:


> @Turlte, danke für die Antwort und den Link!
> 
> Ja das kann ich verstehen. Ich möchte nicht unbedingt das gesamte Layout und den gesamten Dialog neu erstellen, sondern lediglich einen der besagten Buttons durch einen eigenen ersetzen. Gibt es da keine Möglichkeit den Dialog zu bearbeiten ohne ihn komplett neu entwerfen und erstellen zu müssen?



Die Standardimplementierung sieht das nicht vor. Du hast eine Möglichkeit: Besorg dir den Quellcode von JFileChooser (entweder von Oracle oder vom OpenJDK-Repository, wie es eben beliebt) und baue diese Mäglichkeit zur Erweiterung selbst ein. Das hat aber einen ganz großen Nachteil: Du greiffst damit nichtmehr auf die Implementierung von Oracle zu (sondern benutzt theoretisch deine Eigene), weshalb dein JFileChooser dann nicht von den Updates von Oracle profitiert.
Wenn du die nötige Erfahrung hast - bau den Dialog selbst - an sonsten lass es.


----------



## dzim (9. Jul 2014)

Sag mal *@Anti-Banane*: Hast du schon mal für mobile Platformen entwickelt? Ist dir der Begriff "Deklarative Oberflächen" schon mal über den Weg gelaufen?
Ja, das Web mach den deklarativen Weg (HTML beschreibt die Oberfläche, JS die Logik/das Verhalten (und CSS ist das Theming - in dem Fall zwar ein Overkill, aber egal)).
Aber das auch Desktop-Oberflächen deklariert werden um ihnen dann mittels Code (z.B. Java, C++ o.ä.) Leben einzuhauchen, ist schon lange nichts neues mehr:
- Qt hat QML (Desktop (z.B. KDE), Jolla, Tizen, Ubuntu Touch)
- GTK hat Glade
- Windows setzt mit Modern UI auf Webtechniken (wie leider auch Gnome3)
- XAML (Windows .NET)
- XIB (verwurschteltes Apple-XML für Mac)
- Android hat XML-Layouts (und noch sehr viel mehr XML-basiertes Zeug)
- SWT hat XWT (wobei das IMHO keine Sau interessiert)
- Java hat seit JavaFX eben FXML (Java selbst springt wie immer reichlich spät auf den Zug, aber ich finde, dass sich das Ergebniss blicken lassen kann).

Das JavaFX den Web-Script Blödsinn hinter sich lässt ist übrigens eine Nachricht, die schon über 3 Jahre alt ist. Ich verstehe es nicht, das immer noch so viele vollmundig behaupten, das wäre Web-basiert...

Und auch verstehe ich nicht, das so viele eine Anti-JavaFX-und-Swing-ist-ja-soooo-toll-Haltung haben, aber anscheinend (wie du) noch nie JavaFX mal ausprobiert haben. Das ist schon etwas borniert. Sorry, das denke ich wirklich!

BTW: Auf Sun-Tuts beharren und aber einen Oracle-Link angeben ist auch etwas... komisch...

*@Turtle*: Danke für den Link! In solchen Diskussionen hat mir genau dieser immer gefehlt! (Auch wenn ich nicht sehe, woher die changelog-Durchforsterei kommen soll. Aber egal, vielleicht ist es nur die recht frei interpretierte Interpunktion oder Gross-Kleinschreibung in den anderen Posts, die mich verwirrt...)


----------



## X5-599 (9. Jul 2014)

Es gäbe noch die Möglichkeit der Refection. Ist aber erstens eher unschön und zweitens funktioniert das dann nur solange das Windows Look And Feel verwendet wird...

Man muss sich auch auf gewisse Gegebenheiten verlassen, die sich unter Umständen mal ändern könnten (von Oracle aus). d.h. Es wird ein neues Java Update rausgebracht und plötzlich startet die Anwendung nicht mehr.


----------



## turtle (10. Jul 2014)

@dzim
Nur fürs Protokoll: Ich habe nicht mit der changelog-Durchforsterei  angefangen und halte das in diesem Fall für ausgemachten Blödsinn.


----------



## dzim (10. Jul 2014)

@turtle: Eben das meinte ich ja auch!


----------

