![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 16.04.2008
Beiträge: 5
|
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 |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.133
|
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. |
| | |
| | Nach oben #3 |
| Neuer Benutzer Registriert seit: 16.04.2008
Beiträge: 5
|
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? |
| | |
| | Nach oben #4 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.133
|
Die werden direkt übernommen. Im schlimmsten Fall musst du ein repaint ausführen, aber eigentlich müsste das auch automatisch klappen.
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #5 |
| Neuer Benutzer Registriert seit: 16.04.2008
Beiträge: 5
|
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! |
| | |
| | Nach oben #6 |
| Neuer Benutzer Registriert seit: 16.04.2008
Beiträge: 5
|
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. |
| | |
| | Nach oben #7 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.133
|
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. |
| | |
| | Nach oben #8 |
| Neuer Benutzer Registriert seit: 16.04.2008
Beiträge: 5
|
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? |
| | |
| | Nach oben #9 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.133
|
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. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ä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 |