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?
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.
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.
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.
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.
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.
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.