Portal > Foren > Java > Desktop-Applikationen und Grafik > Rätsel: Text bei MouseOver unterstreichen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 16.04.2008, 11:12 Nach oben    #1
van
Neuer Benutzer
 
Registriert seit: 16.04.2008
Beiträge: 5
Standard Rätsel: Text bei MouseOver unterstreichen

Hallo,

ich habe für ein Programm folgende Aufgabenstellung:
In einer JEditorPane (text/html) stehen Hyperlinks vor bestimmten Wörtern. Bei einem mouseover über so einen Hyperlink soll das folgende Wort unterstrichen werden. Verlässt die mouse den Hyperlink, soll auch die Unterstreichung wieder verschwinden. Die Anfangs- und Endpositionen der Unterstreichung sind bekannt.

Diese zwei Bilder sollen das verdeutlichen:





Das rote "K" ist der Hyperlink. Man denke sich beim zweiten Bild den Mauscursor über dieser Grafik hinzu.

Mein bisheriger Ansatz ist gescheitert. Zwar wird das Wort unterstrichen, doch am Ende der Eventverarbeitung scrollt der Textausschnitt (der in eine ScrollPane eingebettet ist) ganz ans Ende des Textes. Beim Test auf einem langsamen Rechner habe ich erkennen können, dass zuerst die Unterstreichung durchgeführt wird, doch dann wird der andere Textausschnitt gezeigt.

Der Benutzer soll natürlich die Illusion bekommen, dass nur das jeweilige Wort unterstrichen wird, nicht, dass der gesamte Text durch eine Version ausgetauscht wird, der eine unterstrichene Textstelle enthält.

Ich habe auch versucht, die Position des Textausschnittes beim mouseover zu speichern, den Text dann zu ersetzen und anschließend die scrollpane wieder an die vorherige Stelle zu scrollen, aber das bewirkt auch nichts. Ich lasse mir sogar in der Konsole ausgeben, mit welchen Werten die scrollpane arbeitet, und zahlenmäßig stimmt alles. Nur ist der Text am Ende trotzdem an seiner Endposition.

Ich habe das Programm schon mit mehreren Leute debuggt, erfolglos, da Java scheinbar Milliarden von Programmzeilen in der hyperlinkUpdate() ausführt, die gar nicht in meinem code sind, sondern sie selbst einfügt.

Nun meine Frage: Vergesst meinen Ansatz und meine Probleme bei der Umsetzung. Wie würdet ihr die ganz obig beschriebene Fragestellung angehen, gerne auch in Pseudocode. Also erstmal ganz allgemein. Geht davon aus, dass die Anfangs- und Endposition der Markierung bekannt sind. Es geht hauptsächlich um die Umsetzung in Swing.

Danke im Voraus,

van
van ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.04.2008, 11:31 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Okay... das wird ein Spaß.

Also: Über die JEditorPane holst du dir das Document, dass du zu einem StyledDocument castest. Diese Klasse besitzt die Methode setCharacterAttributes. Die musst du aufrufen.
Als AttributeSet nimmst du ein SimpleAttributSet, dem du vorher mithilfe der StyleConstants-Klasse die Eigenschaft underline gegeben hast (StyleConstants.setUnderline(simpleAttributeSet, true)).

Theoretisch müsste das klappen.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.04.2008, 11:59 Nach oben    #3
van
Neuer Benutzer
 
Registriert seit: 16.04.2008
Beiträge: 5
Standard

wow, super. Ich habe bisher den Text über setText(String text) ausgetauscht. Deine Version klingt sehr viel eleganter! Ich werde es ausprobieren.
Muss ich dann das unterstrichene Dokument trotzdem mit setText() oder setDocument() in die JEditorPane einfügen, oder werden die Änderung schon beim setCharacterAttributes übernommen?
van ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.04.2008, 12:12 Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Die werden direkt übernommen. Im schlimmsten Fall musst du ein repaint ausführen, aber eigentlich müsste das auch automatisch klappen.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2008, 20:08 Nach oben    #5
van
Neuer Benutzer
 
Registriert seit: 16.04.2008
Beiträge: 5
Standard

Es hat funktioniert! Ich hatte schon beinahe aufgegeben.
Es ist nichteinmal ein repaint notwendig, die Änderung werden sofort übernommen.
Nun muss ich nur noch den Rest des Programms an diesen neuen Teil anpassen, da die unterstrichenen Teile in einem ganz anderen Stil erscheinen. ABer das sollte alles machbar sein.

Nochmals vielen Dank!
van ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.04.2008, 18:36 Nach oben    #6
van
Neuer Benutzer
 
Registriert seit: 16.04.2008
Beiträge: 5
Standard

ah, leider hat sich ein weiteres Problem aufgetan. Die Hyperlink-Grafiken, also die k-Bildchen, werden im dem styleddocument als ein broken link angezeigt, zumindest wird eine Platzhaltergrafik eingefügt, die wie ein zerbrochenes Bild aussieht.
Wie kann man ein styledDocument dazu bringen, folgenden Code korrekt darzustellen?

<a href='index'><img border='0' src='imageURL'></a>

index und imageURL sind jeweils korrekt. Sobald ich die Zeile weglasse, in der das document zu einem styledDocument gecastet wird, erscheint die Grafik samt funktionierendem Hyperlink darunter korrekt.
van ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.04.2008, 21:32 Nach oben    #7
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Kannst du das vielleicht mit etwas Code und Screenshots von "geht" und "geht nicht" verdeutlichen? Normalerweise müsste ein Cast völlig egal sein.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2008, 20:12 Nach oben    #8
van
Neuer Benutzer
 
Registriert seit: 16.04.2008
Beiträge: 5
Standard

Entschuldigung für die lange Pause, aber es stand einiges an Arbeit fürs Studium an. Nun kann's weitergehen.

Die Screenshots oben zeigen, wie bei nichtgecasteten document folgender code richtig interpretiert wird:

<a href='index'><img border='0' src='imageURL'></a>

Nämlich als eine kleine Grafik, die in einem Hyperlink eingebettet ist. Sobald der Mauscursor das Bild erreicht, legen alle Ereignisbehandlungsroutinen los.

Caste ich jedoch das document und lege einen Stil fest, wie folgt, funktionieren weder die Grafik noch der Hyperlink:

StyledDocument styledDocument = (StyledDocument) textFenster.getDocument();

SimpleAttributeSet simpleAttributeSet = new SimpleAttributeSet();
StyleConstants.setFontSize(simpleAttributeSet, 14);

styledDocument.setCharacterAttributes(0, styledDocument.getLength(), simpleAttributeSet, true);


Das Ergebnis sieht so aus:


Lasse ich den <img>-tag weg, und um schließe beispielsweise nur das Wort "LINK" mit dem <a>-tag, wird das Wort "LINK" dargestellt, aber es fehlt der Hyperlink darunter. Es scheint fast so, als ob das styledDocument HTML nicht interpretieren kann.

Nun habe ich gegooglet, und herausgefunden, dass viele Leute den Hyperlink wie folgt einfügen:

// First, setup the href attribute for <A> tag.
SimpleAttributeSet hrefAttr = new SimpleAttributeSet();
hrefAttr.addAttribute(HTML.Attribute.HREF, url.toString());

// Second, setup the <A> tag
SimpleAttributeSet attrs = new SimpleAttributeSet();
attrs.addAttribute(HTML.Tag.A, hrefAttr);

Dieser code ist ein Ausschnitt aus http://www.jguru.com/faq/view.jsp?EID=97829

Da müsste ich einiges umkrempeln, und es löst auch nicht mein <img>-Problem.

Ideen? Könnte man das styledDocument doch noch irgendwie dazu bringen, HTML zu verstehen?
van ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2008, 20:50 Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Wenn du das ganze Dokument verändern willst, bietet sich doch eigentlich ein StyleSheet an. Entweder per CSS oder über die entsprechende API.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JEditorPane -> Text formatieren Binary Allgemeine Java-Programmierung 4 15.12.2006 18:18
Probleme mit RSS heohni PHP-Programmierung 21 13.10.2006 12:10
Text hinter einem Bild mittig positionieren florian HTML, XML und CSS 3 13.09.2006 21:28
Bild im Text mit css? code5 HTML, XML und CSS 11 20.12.2005 13:15
dateisystem, Text an erste Position anhängen Niedi PHP-Programmierung 15 28.10.2005 20:59


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45