JFileChooser mit Zusatzfunktionen

Kwintai

Mitglied
Hallo Leute,

ich suche eine Möglichkeit im JFileChooser nicht nur neue Ordner anzulegen, sondern auch neue Dateien. Oder per Copy&Paste eine Kopie einer exitierenden Datei anzulegen.
Am besten auch noch über ein Rechtsklick-Menu.
Bei vielen FileChoosern aus andern Programmen kenn ich diese Funktionen, aber beim JFileChooser geht das nicht von Haus aus.

Vielen Dank schon mal für eure Hilfe.
 

Kwintai

Mitglied
JFileChooser zu extenden war mir schon fast klar. Allerdings lässt sich der Code auf deiner Beispiel Seite nicht compilieren.

Man muss doch irgendwie an das schon bestehende RightClick Menu ran kommen und diesem dann noch zusätzliche JMenuItems hinzufügen können.
 
Zuletzt bearbeitet:

GUI-Programmer

Top Contributor
Ich weis nicht genau, wie sich dein Vorhaben umsetzen lässt, aber grundsätlich kann man jede Komponente des JFileChoosers ändern:
Java:
private JTextField txtfldDirectory;
private JFileChooser chooser;
//...
//Initialisieren des Textfeldes:
initializeTextField(chooser);
//Danch zum Beispiel:
txtfldDirectory.setText("Der neue Text");
txtfldDirectory.setEditable(false);
//...

private void initializeTextField(Component component) {
	if (component instanceof JTextField) {
		JTextField txtfld = (JTextField)component;
		txtfldDirectory = txtfld;
	}
	else if (component instanceof Container) {
		Container container = (Container)component;
		for (int i = 0; i < container.getComponentCount(); i++) {
			Component child = container.getComponent(i);
			initializeTextField(child);
		}
	}
}

Falls es mehrere Komponenten gibt, musst du halt suchen!!!
 

Guybrush Threepwood

Top Contributor
JFileChooser zu extenden war mir schon fast klar. Allerdings lässt sich der Code auf deiner Beispiel Seite nicht compilieren.

Man muss doch irgendwie an das schon bestehende RightClick Menu ran kommen und diesem dann noch zusätzliche JMenuItems hinzufügen können.

Ich habe das früher auch mal gemacht und es hat eigentlich ganz gut geklappt. Man kann eine GlassPane über den Chooser legen und rechte Mausklicks abfangen. Ich weiß nicht, ob es mit der aktuellen Java-Version noch geht. Im Netz gibt es dazu viele Beispiele, z. B. von Filthy Rich Clients: ContextMenuFileChooser.java - filthy-rich-clients - filthy-rich-clients - Google Project Hosting
 

Kwintai

Mitglied
Ich habe Java 7 drauf. Nun habe ich den Code ein wenig angepasst und auf Java 7 Niveau gebracht.
Er sieht nun so aus und wird auch anständig compiliert. Ich habe nun nur noch das Problem, dass ich ein leeres, graues JFrame sehe, welches in etwa die Form des JFileChoosers hat, aber dort kein Inhalt zu sehen ist. Es ist einfach nur flächig grau. Wenn ich rechts klicke bekomme ich das Menu zu sehen, aber nur den Eintrag der direkt unter der Maus steht. Irgendwie scheint noch ein repaint() zu fehlen, aber ich weiss nicht wohin, falls es überhaupt ein repaint() Problem ist.
Meine Änderungen belaufen sich darauf, dass ich aus der RightClickGlassPane eine richtige innere Klasse gemacht habe und diese extends Component. Dann habe ich die zwei Methodenaufrufe geändert:
1. redispatchMouseEvent(e, repaint) >>> processMouseEvent(e)
2. doDispatch(e) >>> dispatchEvent(e)

Kann mir nun wer weiterhelfen?
Hier mal der Code:

Java:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JPopupMenu;

public class ContextMenuFileChooser extends JFileChooser {
	private static final long serialVersionUID = 1L;
	protected Component right_click_pane;

	public ContextMenuFileChooser() {
                super();

                JPopupMenu popup = new JPopupMenu();
                popup.add(new DeleteAction(this));
                popup.add(new NewFolderAction(this));
                popup.setLightWeightPopupEnabled(false);

                right_click_pane = new RightClickGlassPane(this, popup);
                setFileSelectionMode(FILES_AND_DIRECTORIES);
        }

	protected JDialog createDialog(Component parent) {
		JDialog dialog = super.createDialog(parent);

		// create the right click glass pane.
		dialog.setGlassPane(right_click_pane);
		right_click_pane.setVisible(true);

		return dialog;
	}

	public static void main(String[] args) {
		final JFileChooser jfc = new ContextMenuFileChooser();
		jfc.showOpenDialog(null);
		System.exit(0);
	}

	public static void p(String str) {
		System.out.println(str);
	}

}

class RightClickGlassPane extends Component {
	private static final long serialVersionUID = 1L;
	JFileChooser fc;
	JPopupMenu popup;
	
	public RightClickGlassPane(JFileChooser fc, JPopupMenu popup) {
		this.fc = fc;
		this.popup = popup;
	}
	
    protected void redispatchMouseEvent(MouseEvent e, boolean repaint) {
            Component component = this.getComponentAt(e.getPoint());
            if (component == null) {
                    return;
            }
            String chooser_class = "javax.swing.plaf.metal.MetalFileChooserUI$5";
            if (component.getClass().getName().equals(chooser_class)) {
                    super.processMouseEvent(e);
            } else {
                    dispatchEvent(e);
            }
    }
}

class DeleteAction extends AbstractAction {
	private static final long serialVersionUID = 1L;
	protected JFileChooser chooser;

	public DeleteAction(JFileChooser chooser) {
		super("Delete");
		this.chooser = chooser;
	}

	public void actionPerformed(ActionEvent evt) {
		File file = chooser.getSelectedFile();
		if (file != null) {
			file.delete();
			chooser.rescanCurrentDirectory();
		}
	}
}

class NewFolderAction extends AbstractAction {
	private static final long serialVersionUID = 1L;
	protected JFileChooser chooser;

	public NewFolderAction(JFileChooser chooser) {
		super("New Folder");
		this.chooser = chooser;
	}

	public void actionPerformed(ActionEvent evt) {
		File cwd = chooser.getCurrentDirectory();
		if (cwd != null) {
			File new_dir = new File(cwd, "New Folder");
			new_dir.mkdir();
			chooser.rescanCurrentDirectory();
		}
	}
}
 

Kwintai

Mitglied
Ich habe noch ein wenig am Code gebastelt und awt.Component mal auf swing.JComponent durchweg geändert und siehe da, ich sehe den JFileChooser. Allerdings funktioniert das rechtsklick PopupMenu noch nciht richtig. Die neuen Action Klassen wie Delete, die ich oben dem PopupMenu adde, werden bei einem rechtsklick nicht angezeigt. Es öffnet sich nur das normale Menu ohne die neuen Einträge.
Jemand ne Idee?
 

Kwintai

Mitglied
ich habe nochmal die methoden des filechoosers durchgeschaut und dort gibt es eine methode names setComponentPopupMenu(JPopupMenu popup), welche ganz bequem ohne extra glasspane oder sonst irgendwelchen gedöns, ein popup menu per rechtskllick editieren lässt.

hier der code:
Java:
JFileChooser chooser = new JFileChooser();
JPopupMenu popup = new JPopupMenu();
popup.add(new YOUR_ABSTRACTACTION_CLASS(chooser));
chooser .setComponentPopupMenu(popup);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
T JFileChooser ist Englisch und bleibt Englisch und bleibt Englisch... AWT, Swing, JavaFX & SWT 15
M Swing jFileChooser Header viewTypeDetails setFont AWT, Swing, JavaFX & SWT 0
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Swing JFileChooser best. Ordner wie Dateien behandeln AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
L JFileChooser Datentyp Unterscheidung AWT, Swing, JavaFX & SWT 6
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing JFilechooser - Detailansicht AWT, Swing, JavaFX & SWT 0
M JFileChooser Look and Feel AWT, Swing, JavaFX & SWT 2
T JFileChooser Rahmenfarbe ändern AWT, Swing, JavaFX & SWT 1
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
T Swing JFileChooser und FileView AWT, Swing, JavaFX & SWT 4
M Einzelne Ordner im JFileChooser ausgrauen? AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser inline editing AWT, Swing, JavaFX & SWT 4
D JFileChooser anpassen AWT, Swing, JavaFX & SWT 5
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
T Importer-Auswahl im JFileChooser AWT, Swing, JavaFX & SWT 3
N JFileChooser bzw. FileDialog Problem AWT, Swing, JavaFX & SWT 10
A Swing JFileChooser - Größenänderung nach Aufruf von showOpenDialog() AWT, Swing, JavaFX & SWT 15
D Serverdirectory auf Client browsen mit JFileChooser AWT, Swing, JavaFX & SWT 7
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
C JFileChooser und Netzwerk Laufwerke AWT, Swing, JavaFX & SWT 4
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
P JFileChooser mit verschidene Endungen AWT, Swing, JavaFX & SWT 12
S Swing Ordner im JFileChooser auswählen AWT, Swing, JavaFX & SWT 2
C JFileChooser bringt parent durcheinander AWT, Swing, JavaFX & SWT 2
N JFileChooser mit Dateinamenvorgabe AWT, Swing, JavaFX & SWT 9
S JFileChooser GTK (Ubuntu) "hässlich" AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser mit modifiziertem Kontextmenü AWT, Swing, JavaFX & SWT 4
S JFileChooser öffnet den falschen Ordner AWT, Swing, JavaFX & SWT 4
A Swing JFilechooser zeigt verzeichnisse nicht an AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
M JFileChooser umbenennen verbieten AWT, Swing, JavaFX & SWT 4
Helgon JFileChooser öffnet sich 2x AWT, Swing, JavaFX & SWT 12
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
V JFileChooser auf Mac und Netzwerkordner AWT, Swing, JavaFX & SWT 2
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
M JFileChooser setCurrentDirectory() - Verzeichnis relativ zum Code/binary AWT, Swing, JavaFX & SWT 14
P Swing Dateinamen im JFileChooser vorschlagen AWT, Swing, JavaFX & SWT 11
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T Swing JFileChooser --> Desktop und Laufwerke im "Suchen in" - Drop Down AWT, Swing, JavaFX & SWT 3
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
F Swing JFileChooser - Dateinamen nicht editierbar machen AWT, Swing, JavaFX & SWT 8
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
Ivan Dolvich [Linux] JFileChooser sieht komisch aus... AWT, Swing, JavaFX & SWT 12
M Zurück-Button in JFileChooser AWT, Swing, JavaFX & SWT 9
N JFileChooser AWT, Swing, JavaFX & SWT 4
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
S JFileChooser Dateiname Autovervollständigung AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
I Swing JFileChooser '\' im Pfad... AWT, Swing, JavaFX & SWT 2
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
M Swing Execption beim JFileChooser AWT, Swing, JavaFX & SWT 4
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
alderwaran jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren AWT, Swing, JavaFX & SWT 1
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
Iron Monkey JFileChooser DIRECTORIES_ONLY AWT, Swing, JavaFX & SWT 4
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
kodela Sicherheitsabfrage mit JFileChooser AWT, Swing, JavaFX & SWT 2
DARK_ZERATO2 jFileChooser AWT, Swing, JavaFX & SWT 4
G JFileChooser Problem AWT, Swing, JavaFX & SWT 4
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
P JFileChooser AWT, Swing, JavaFX & SWT 2
M Swing JFileChooser und JFrame AWT, Swing, JavaFX & SWT 5
G Swing JFileChooser in einem JPanel? AWT, Swing, JavaFX & SWT 3
J JFileChooser Dateiauswahl beim Tippen einschränken AWT, Swing, JavaFX & SWT 3
M Swing JFileChooser mit Windows 7 AWT, Swing, JavaFX & SWT 8
R JFileChooser - Initiales Verzeichnis auswählen AWT, Swing, JavaFX & SWT 8
brainray JFileChooser - es sollen nur Ordner wählbar sein AWT, Swing, JavaFX & SWT 2
T JFileChooser Problem AWT, Swing, JavaFX & SWT 3
N Mit JFileChooser ein Verzeichnis auswählen AWT, Swing, JavaFX & SWT 7
M Swing JFileChooser und versteckte Ordner AWT, Swing, JavaFX & SWT 2
F jFileChooser verwenden AWT, Swing, JavaFX & SWT 4
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
ARadauer Swing JFileChooser mit Bildvorschau AWT, Swing, JavaFX & SWT 5
H Swing Dateiauswahldialog mit JFileChooser funktioniert unzuverlässig AWT, Swing, JavaFX & SWT 11
G Swing JFileChooser nur in Verzeichnis+Unterverzeichnisse AWT, Swing, JavaFX & SWT 5
K Swing JFileChooser AWT, Swing, JavaFX & SWT 6
M JFileChooser einschränken AWT, Swing, JavaFX & SWT 3
L JFileChooser braucht lang zum öffnen AWT, Swing, JavaFX & SWT 2
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
M JFilechooser defaultdirectory AWT, Swing, JavaFX & SWT 5
C JFilechooser this.setAlwaysOnTop AWT, Swing, JavaFX & SWT 2
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben