Verzeichnisauswahl

Alex02

Mitglied
Hallo,

ich möchte über ein popupp - Fenster (Windowslike) ein Verzeichnis auswählen und dieses als String zurückgeben.

Kann mir da jemand sagen, wie das geht?

Gruß

Alex
 
Hallo Alex,

mit folgendem Code kannst du entweder ein Verzeichnis oder Dateien in einem Verzeichnis auswählen:
Code:
import java.awt.DisplayMode;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class MultiDateiauswahl {
	
	Display display = new Display();

	Shell shell = new Shell(display);

// the label used to display selected dir/file.
	Label label;

	Button buttonSelectDir;

	Button buttonSelectFile;

	String selectedDir;

	String fileFilterPath = "i:/daten/scratch";

	public MultiDateiauswahl() {
		label = new Label(shell, SWT.BORDER | SWT.WRAP);
		label.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
		label.setText("Select a dir/file by clicking the buttons below.");
		buttonSelectDir = new Button(shell, SWT.PUSH);
		buttonSelectDir.setText("Ende");
		buttonSelectDir.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {

				display.dispose();
			}
		});
		buttonSelectFile = new Button(shell, SWT.PUSH);
		buttonSelectFile.setText("Auswahl Datei(en)");
		buttonSelectFile.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {
				FileDialog fileDialog = new FileDialog(shell, SWT.MULTI);

				fileDialog.setFilterPath(fileFilterPath);
				fileDialog.setFilterExtensions(new String[] { "*.*", "*.csv",
						"*.txt", });
				fileDialog.setFilterNames(new String[] { "Any", "csv DAtei",
						"Textdatei" });
				String firstFile = fileDialog.open();

				if (firstFile != null) {
					fileFilterPath = fileDialog.getFilterPath();
					String[] selectedFiles = fileDialog.getFileNames();
					StringBuffer sb = new StringBuffer(
							"Selected files under dir "
									+ fileDialog.getFilterPath() + ": \n");
					
//					Ausgewählten Pfad in der Datenklasse eintragen 				
					Datenklasse.getInstance().setPfadname(fileDialog.getFilterPath());
//					Ausgewählten Pfad aus der Datenklasse anzeigen 					
					System.out.println("Pfad:     " +Datenklasse.getInstance().getPfadname());
//				Übergabe aller Dateien
					Datenklasse.getInstance().setDateitabelle(selectedFiles);
					
					for (int i = 0; i < selectedFiles.length; i++) 
					{
						sb.append(selectedFiles[i] + "\n");
						
//					Ausgewählte Datei in der Datenklasse eintragen - wenn mehrere ausgewählt wurden gewinnt das letzte						
						Datenklasse.getInstance().setDateiname(selectedFiles[i]);
						System.out.println("Datei: " +Datenklasse.getInstance().getDateiname());
					}
					
					label.setText(sb.toString());
				}
			}
		});
		label.setBounds(20, 25, 300, 600);
//		buttonSelectDir.setBounds(0, 65, 200, 30);
//		buttonSelectFile.setBounds(200, 65, 200, 30);
		buttonSelectDir.setBounds(400, 80, 150, 30);
		buttonSelectFile.setBounds(400, 160, 150, 30);
		
		shell.pack();
		shell.open();
		//textUser.forceFocus();

		// Set up the event loop.
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				// If no more entries in event queue
				display.sleep();
			}
		}
		display.dispose();
	}

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


Hier dazu die erforderliche Datenklasse:

//********************************************************
//Datenklasse zur Überbage der gefundenen Werte Start
//********************************************************
	
public class Datenklasse {

private static Datenklasse _instance;

public synchronized static Datenklasse getInstance() {
	if (_instance == null) {
		_instance = new Datenklasse(pfadname, dateiname, sDateitabelle);
	}

	return _instance;
}

//		  		Konstruktor Datenklasse legt einen Satz der Klasse 		
//		  		Datenklasse an.
public Datenklasse(String k, String b, String[] c) {
	pfadname = k;
	dateiname = b;
	sDateitabelle = c;
}

//		  	Methode Klassensatz neu anlegen
public void satzNeu(String k, String b, String[] c) {
	pfadname = k;
	dateiname = b;
	sDateitabelle = c;
}

//		  	Methode getpfadname liefert den Schlüsselwert des aktuellen
//		  Satzes der Klasse
public String getPfadname() {
	return pfadname;
}

//		  	Methode getdateiname liefert die Bezeichnung des aktuellen
//		  	Satzes der Klasse
public String getDateiname() {
	return dateiname;
}

public String[] getDateitabelle() {
	return sDateitabelle;
}	

//		  	In der Klasse Datenklasse wird der aktuelle Wert des 
//		  	Feldes pfadname auf den an die Methode übergebenen Wert gesetzt.
public void setPfadname(String key) {
	pfadname = key;
}

//		  Dateinamen setzten  
public void setDateiname(String bez) {
	dateiname = bez;
}

//		  Dateinamen setzten  
public void setDateitabelle(String[] pDateitabelle) {
	sDateitabelle = pDateitabelle;
}

//		  	Die Klasse besteht aus diesem beiden Feldern
private static String pfadname;

private static String dateiname;
private static String sDateitabelle[];

}


Gruß

Harald
 
Hallo Harald,

danke für die Antwort.

Noch ne kleine Frage:

Welches Jar-File gehört zu

org.eclipse ..........

Gruß

Alex
 
Ich hab das etwas anders gelöst:

JFileChooser jfchoos = new JFileChooser ();
jfchoos.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
JFrame jframe = new JFrame ();
Container cpane = jframe.getContentPane();
cpane.add(jfchoos);

cpane.setLayout(new FlowLayout());
jframe.setSize(550,400);

jframe.show();

jetzt hatte ich eigentlich vor, mir den Pfad als String zurückzugeben, aber irgendwie wills nicht ganz

Gruß

Alex
 
Zuletzt bearbeitet:
Hallo,

danke für Deine Hilfe.

Jetzt noch mal eine Frage. ist es möglich einen JFileChooser auf dem Server zu benutzen.

Ich bekomm immer eine Fehlermeldung, wenn ich Jframes aufrufen will!

(System: Windows)

Gruß

Alex
 
Hallo,

die Fehlermeldung lautet:

ErrorCode: 4612530443357519875
ErrorMessage: Fehler beim Rendering. Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null
SERVER_PORT 80
DEFAULT_URL /portal_new/default.asp
HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1)
rq_Template internal/layout/vm/html/frames/appmain.vm
rq_Lang de
rc_CurrentParentId -1
rq_SId F52B317B1629E15D9206CA818497915074FF79E2
rq_RecId -1
SERVER_NAME 10.17.99.97
HTTP_ACCEPT image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
URL_QUERY_STRING /portal_new/default.asp?rq_TargetId=31303032&rq_AppId=31313933&rq_RecId=2D31&rq_SourceAppId=31313933&rq_ClientTy pe=68746D6C&rq_Template=696E7465726E616C2F6C61796F75742F766D2F68746D6C2F6672616D65732F6170706D61696E 2E766D&rq_Lang=6465&rq_SourceId=31303032&rq_SId=4635324233313742313632394531354439323036434138313834 3937393135303734464637394532
rq_ClientType html
CONTENT_TYPE
rc_CurrentRecId -1
loginNameUTF8 626C616E726531
SERVER_PROTOCOL HTTP/1.0
rc_CurrentRecords {1012=}
SCHEME http
rq_AppId 1193
rq_SourceAppId 1193
DOWNLOAD_URL /portal_new/default.asp
REQUEST_URI /portal_new/default.asp
co_SId F52B317B1629E15D9206CA818497915074FF79E2
HTTP_ACCEPT_ENCODING
QUERY_STRING rq_TargetId=31303032&rq_AppId=31313933&rq_RecId=2D31&rq_SourceAppId=31313933&rq_ClientType=68746D6C& rq_Template=696E7465726E616C2F6C61796F75742F766D2F68746D6C2F6672616D65732F6170706D61696E2E766D&rq_La ng=6465&rq_SourceId=31303032&rq_SId=4635324233313742313632394531354439323036434138313834393739313530 3734464637394532
SYS_APP_1193 --- App information: --- guid: 3AE77B2ECEBF2CBECC583C0ADE23E99E4D74F76B id: 1193 template: 30 startfup: 1000 type: 1 --- FUP information: --- guid: FD98404C111C37588D0B13A64DC0A54DB8804A9D id: 1002 lang: de / item: Eingabeseite lang: en / item: Input Page --- FUP information: --- guid: FF8C8F7A264ECB251D0A9C39979D0C62109C573D id: 1000 lang: de / item: Hauptseite lang: en / item: Main Page --- FUP information: --- guid: E883A41FB2C48136479D638BC26D25C8FB3444C7 id: 1001 lang: de / item: Suche lang: en / item: Search
rq_TargetId 1002
loginDomain 6A76686C2E636F6D
HTTP_COOKIE loginNameUTF8=626C616E726531; loginDomain=6A76686C2E636F6D; ASPSESSIONIDASQQRTTR=POHNNPMBACFKLFFADPPGEGDN
rq_SourceId 1002
Stack Trace de.uplanet.error.ExceptionBase: Fehler beim Rendering.
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null
at de.uplanet.lucy.server.composer.Composer.c(Unknown Source)
at de.uplanet.lucy.server.composer.Composer.a(Unknown Source)
at de.uplanet.lucy.server.composer.Composer.processRequest(Unknown Source)
at de.uplanet.lucy.server.connector.ServerBridgeRequest.internalProcessRequest(Unknown Source)
at de.uplanet.lucy.server.connector.AbstractServerBridgeRequest$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:437)
at de.uplanet.lucy.server.connector.AbstractServerBridgeRequest.processRequest(Unknown Source)
at de.uplanet.lucy.server.connector.RequestWorkerBase.processElement(Unknown Source)
at de.uplanet.util.QueueWorker.run(Unknown Source)
at de.uplanet.lucy.server.connector.RequestWorker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:534)
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:246)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:175)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:220)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230)
at org.apache.velocity.runtime.directive.Parse.render(Parse.java:181)
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:114)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230)
at org.apache.velocity.Template.merge(Template.java:256)
... 12 more

Ich nehm mal an, das liegt daran, dass ich versuch das mit einem JFrame zu lösen.

Gibts eine Möglichkeit über ein Applet o.ä zu gehen


Gruß

Alex
 
Alex02 hat gesagt.:
Hallo,

danke für Deine Hilfe.

Jetzt noch mal eine Frage. ist es möglich einen JFileChooser auf dem Server zu benutzen.

Ich bekomm immer eine Fehlermeldung, wenn ich Jframes aufrufen will!

(System: Windows)

Gruß

Alex
Hallo Alex,

ich bin zwar nicht der Java Experte, aber es sollten sowohl JFrame, als auch JFileChooser möglich sein. Ich habe in meiner kuzen Java Zeit damit noch keine Probleme gehabt.

Gruß

Harald
 
Hallo Harald,

ich bekomme dei ganze Geschichte lokal zum Laufen.

Das Fenster wird angezeigt -> ich wähl ein Verzeichnis aus -> übergeb den Pfad.....

alles funktioniert.

Doch wenn ich versuche die Geschichte auf dem Server laufen zu lassen, bekomme ich die oben aufgeführte Fehlermeldung :confused:

Gruß

Alex
 
Zurück