"FileListener" für JEditorPane gesucht

Bei einer JEditorPane kann man ja einen HyperlinkListener anmelden.
Ich suche etwas ähnliches für Dateien, die im Editor mit Pfad auftauchen.
Vermutlich - da ich dafür in der Api und in Google nichts gefunden habe - liefe das auf eine Erweiterung der JEditorPane um diese Funktionalität hinaus.

Bevor ich das in Angriff nehme: Gibt es noch andere Ansätze?

Es wäre außerdem hilfreich, wenn ich mir anschauen könnte, wie die JEditorPane in dieser Hinsicht programmiert ist. Leider finde ich keine Source-Jars unter http://www.oracle.com/technetwork/java/javase/downloads/index.html - hat da noch jemand einen Tipp?

Unter http://java-blog.de/2010/05/13/sourcen-der-java-api-in-eclipse-einbinden/ ist beschrieben, wie man diese dann in Eclipse einbindet. Der erste Link in Google führt zu einem seltsamer Weise toten Forum. hustet

Die Anmerkung dort zur src.zip hilft mir nicht weiter, in meiner Java-Version ist kein src.zip enthalten.

Edit: Es fehlt hier der C-Tag, er verhält sich leider wie ein code-Tag.

Welche Java-Version hast du denn überhaupt?

Zu deinem Problem: ich denke nicht, dass es dazu eine fertige Lösung geben wird. Du musst auch bedenken, dass die Pfade sich unterscheiden:
“/test/blub/”
“c: est\blub”
“\ est\blub”
“~/blub”
etc.
sind alles legitime Pfade (wobei der 3. recht fragwürdig ist)

Irgendein JDK 7. Unter anderem. Aber bei dem hab ich nachgeschaut.

[QUOTE=XHelp;22562]Zu deinem Problem: ich denke nicht, dass es dazu eine fertige Lösung geben wird. Du musst auch bedenken, dass die Pfade sich unterscheiden:
„/test/blub/“
„c: est\blub“
„\ est\blub“
„~/blub“
etc.
sind alles legitime Pfade (wobei der 3. recht fragwürdig ist)[/QUOTE]

Das ist mir klar, das läge dann aber ja in meiner Interpretation, welche davon ich „anklickbar“ darstellen lasse.

Dann nimmst du irgendein scr.zip. Unter anderem :wink:

Du könntest entweder http://jdk7src.sourceforge.net/ nehmen, aber „src.zip“ sollte dir schon weiterhelfen - es sollte da sein: http://www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html#contents. Vlt schaust du im JRE verzeichnis nach?

Stimmt! Ich hab tatsächlich im JRE geschaut. Das einzige JDK das herumliegt, ist noch ein 6er. Beim Versuch, von der Oracle-Seite ein neues zu installieren, kam

"Accesss to the page has been denied

because the following virus was detected
Clamd: Heuristics.Broken.Executable"

Bei Eclipse müsste ja ein 7er dabei sein, da ich mit Java 7 Programmiere, aber da find ich auch keins. Mag an der Hitze liegen.

Update: Die Sourcen hab ich Eclipse inzwischen hinzugefügt und werde mich jetzt mittelfristig daran machen, zu prüfen, wie aufwändig mir die Anpassungen erscheinen.

[QUOTE=Crian]Bei einer JEditorPane kann man ja einen HyperlinkListener anmelden.
Ich suche etwas ähnliches für Dateien, die im Editor mit Pfad auftauchen.
Vermutlich - da ich dafür in der Api und in Google nichts gefunden habe - liefe das auf eine Erweiterung der JEditorPane um diese Funktionalität hinaus.

Bevor ich das in Angriff nehme: Gibt es noch andere Ansätze?[/QUOTE]

Ich hab’s nicht getestet, aber “FILE://myFolder/myText.txt” sollte eigentlich auch als Hyperlink/URL zählen und dementsprechend behandelt werden. Da reicht es vielleicht schon die Dateiverweise im Text in dieses Format zu bringen um die vorhandenen Mechanismen nutzen zu können.

Leider nicht, aber gute Idee.

Inwiefern „nicht“? Ein Hyperlink in HTML unterstützt diverese Protokolle. Zumindest kann man einen Verweise auf ein Verzeichnis oder Datei und ein Klick darauf mit JEditorPane problemlos implementieren:

		"<html><body><a href=\"file://c:/temp\">hier</a></body></html>");
browser.setEditable(false);
browser.addHyperlinkListener(new HyperlinkListener() {
	public void hyperlinkUpdate(HyperlinkEvent e) {
		if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
			System.out.println(e.getURL());
		}
	}
});```

Ja. Aber dann muss ich selbst die Datei erkennen, unterstrichen darstellen und so. Bei “echten” Links passiert das bereits. Schreibe ich also “http://www.example.org/” in den Text, macht mir die JEditorPane daraus etwas unterstrichenes, das ich anklicken kann (und mit dem HyperlinkListener mitbekommen, wenn der Benutzer darauf klickt).

Leider tut sie das nicht, wenn file:\irgendwas\hallo.txt oder so im Text steht. Genau dafür muss ich wohl selbst Hand anlegen.

Wie hast Du denn das implementiert? Hab schon lange nichts mehr mit JEditorPane gemacht aber der Hyperlink Listener funktioniert ja nur wenn das Editieren deaktiviert ist und, dass er automatisch aus einem eingetippten http://… einen Hyperlink macht ist mir auch neu.

Naja, aber das kann mit ein paar RegExp ja nicht so schwer sein. Gegebenenfalls kann man die Fundstellen ja noch mit File.exists() überprüfen. Klar, Javaprogrammierer bevorzugen fertige Lösungen ( = Code der von jemand anderem als einem selber geschrieben wurde), aber man sollte beileibe nicht davon ausgehen das Libraries - inklusive der normalen Java Klassenbibliothek - immer nur Spitzencode enthalten. Andere Leute arbeiten oft auch nur mit gaaanz lauwarmem Wasser. :wink:

Das Editieren ist deaktiviert, der Linklistener geht trotzdem.

@DowJones: Macht man gleich etwas neu, was es schon drölf mal gibt, heißt es, man erfinde das Rad neu. Fragt man erstmal, heißt es, man bevorzuge fertige Lösungen von anderen. grinst Ich war eigentlich davon ausgegangen, dass so ein naheliegendes Feature schon da wäre und ich es nur nicht gefunden habe, ich werde mich dann aber (by side) daran machen.

Das Erkennen selbst ist sicher nicht schwer und die Klasse JEditorPane ist zum Glück auch nicht sehr lang. Wird schon werden.

Das war doch meine Aussage: Der Listener funktioniert nur wenn das Editieren deaktiviert ist. Daher stellt sich für mich die Frage wie kommen denn Deine http Hyperlinks rein, die ja zu funktionieren scheinen.

Die JEditorPane wird zur Anzeige genutzt. Ich betreibe sie im Content-Type “text/html” und baue eine wachsende HTML-Seite auf, die in der JEditorPane angezeigt wird.

Du möchtest mir vorschlagen, nicht die JEditorPane zu erweitern, sondern beim Einfügen neuer Inhalte Dateien in lokaler Link umzusetzen? (ich vermisse das alte [ c ]…)

Ich wollte nur darauf hinweisen, dass HTML verschiedene Typen von Links unterstützt, neben dem http funktionieren auch https, ftp, file, telnet…
Und wie mein Beispiel Code gezeigt hat, reagiert der HyperlinkListener, wenn man auf einen solchen file Link klickt.
Und das war ja - soweit ich verstanden habe - die ursprüngliche Anforderung. Das man erstens auf so einen Link klicken und zweitens darauf reagieren kann.

Ich frag mich gerade, warum bei Uniform Resource Locator – Wikipedia drei Slashes hinter file: stehen. Stimmt das?

Unter File URI scheme - Wikipedia steht

Unix

Here are two Unix examples pointing to the same /etc/fstab file:

file://localhost/etc/fstab
file:///etc/fstab

Windows

Here are some examples which may be accepted by some applications on Windows systems, referring to the same, local file c:\WINDOWS\clock.avi

file://localhost/c|/WINDOWS/clock.avi
file:///c|/WINDOWS/clock.avi
file://localhost/c:/WINDOWS/clock.avi

[QUOTE=Crian]Ich frag mich gerade, warum bei http://de.wikipedia.org/wiki/Uniform_Resource_Locator drei Slashes hinter file: stehen. Stimmt das?
[/QUOTE]

Weiter unten steht auch „Streng genommen hat dieses Schema die Form file:///, wobei aber der Host-Teil praktisch nicht verwendet wird, da das file-Schema mangels einer Möglichkeit, ein Netzwerkprotokoll für den Zugriff auf die Datei anzugeben, kaum sinnvoll über ein Netzwerk benutzt werden kann“. Das dürfte die Erklärung sein - der Host wird einfach weggelassen.

PS: Mein Posting weiter oben war nicht böse gemeint. Dachte nur das man sowas ziemlich fix selber implementieren kann. :slight_smile:

Hatte ich auch nicht böse aufgenommen.

Ich frag mich gerade, wie ich mit Pfaden der Art \freigabe\verzeichnis\unterverzeichnis\datei.txt - wie sie hier leider vorkommen - umgehen soll. Kommen da am Anfang vier Slashes hin? Oder zwei?

-> a) file://freigabe/verzeichnis/unterverzeichnis/datei.txt

oder

-> b) file:////freigabe/verzeichnis/unterverzeichnis/datei.txt

Ich kann das natürlich irgendwie wurschteln, wie ich will, aber ich würde es schon gern “richtig” machen.

Das könnte man sicher in irgendwelchen RFCs nachlesen, aber ich glaube ich würde erstmal einfach bei dem bleiben, was File.toURI().toURL() auswirft.

Spricht so von Java Code? Entweder file://freigabe/verzeichnis/… oder file:\\freigabe/verzeichnis beide funktioniert.
Wie kommst Du auf vier Slashes?