JTextPane Mausklick auf bestimmte Wörter startet Aktion

Status
Nicht offen für weitere Antworten.

milanwb

Aktives Mitglied
Hallo,

ich habe mal eine allgemeine Frage, ob das was ich grade versuche überhaupt Möglich ist.

Und zwar habe ich eine JTextPane (bestandteil eines Chats), in der halt die Texte der User eingeblendet werden.
Die Meldungen sind wie folgt aufgebaut:

Nickname: der Text

Wenn ich nun auf "Nicknamen" klicken, möchte ich dass sich das Profil des Users öffnet.

Oder ein anderes Beispiel wäre z.B. dass bestimmte Texte als Link eingefügt werden können: Änhlich wie bei HTML kann der User über eine Funktion einen Link eingeben, der sich hinter einen bestimmten Wort verbirgt.
Wenn ein anderer User nun auf dieses Wort klickt soll sich die entsprechende Seite öffnen. (ähnlich wie Das Wort )




Ist dies eigentlich mit der JTextPane machbar? Oder benötige ich andere Komponenten?

Wäre über einen Lösungsansatz sehr dankbar, da mir momentan leider die Ideen ausgehen, habe schon versucht bestimmte Wörter abzuspeichern und bei einem Mausklick auf dieses Wort dann bestimmte Aktionen aufzurufen, jedoch gab dies immer Probleme, da es ja immer unterschiedliche Wörter sein können...
 

milanwb

Aktives Mitglied
Hi,

würde das heißen, dass ich die Links als HTML einfügen muss?
Wie kann ich das machen, ich verwende zum Einfügen der texte StyleConstants und schreibe die Daten dann via doc.insertString in das Textfeld.
Wie kann ich denn dann HTML einfügen?
 

kaie

Bekanntes Mitglied
Gut, wenn Du nicht über HTML gehen willst, dann kannst Du auch einfach folgendes machen:

1. füge einen MouseListener hinzu
2. wenn der Button gedrückt wurde, ermittelst Du die Position im Dokument über die JTextPane-Methode viewToModel:
Code:
int pos = textpane.viewToModel( new Point(me.get(), me.getY()));
3. hole Dir den Style aus Deinem Dokument:
Code:
Style s = textpane.getStyledDocument().getLogicalStyle(pos);
4. überprüfe, welcher Style das ist und reagiere entsprechend

Klappt das besser?
 

milanwb

Aktives Mitglied
Hi,

habe jetzt mal eine Textdatei aufgebaut:

Die Mouslistener Methode:

Code:
int pos  = pane.viewToModel(new java.awt.Point(evt.getX(), evt.getY()));
        Style s = pane.getStyledDocument().getLogicalStyle(pos);
        
        pane.setText(s.getName());


Die Methode zum einfügen der Daten:

Code:
try {
        
        
        Document doc = pane.getDocument();
        SimpleAttributeSet a = new SimpleAttributeSet();
        StyleConstants.setUnderline(a,true);
        
        doc.insertString(doc.getLength(),"blaaa \n",null);
        doc.insertString(doc.getLength(), "blaaaa blubbbb",a);
        
        } catch (Exception e) {
            pane.setText("Fehler: " + e);
        }

Wenn ich dann auf ein Wort klicke, so bekomme ich allerdings immer "default" als s.getName().

Muss ich jetzt dann meine Links anders in die TextPane einfügen? Oder liefer s.getName() nicht das was ich erwarte?

Danke schon mal für deine schnelle und gute Hilfe! Das ist auf jedenfall der richtige Weg!
 

kaie

Bekanntes Mitglied
Probier's mal so:
Code:
Style unterstrichen = new Style();
StyleConstants.setUnderline(unterstrichen,true);
Speichere diesen Style als Attribut, dann kannst Du in der mousePressed-Methode darauf zugreifen:
Code:
int pos  = pane.viewToModel(new java.awt.Point(evt.getX(), evt.getY())); 
Style s = pane.getStyledDocument().getLogicalStyle(pos); 
if( s==unterstrichen )
{
   System.out.println("Person wurde angeklickt");
}
Wenn das nicht funktioniert, kann es sein, dass getLogicalStyle nur den Style des Absatzes liefert und nicht den des Wortes. Dann müsste man nochmal genauer in der API von Document suchen (wozu ich aber im Moment zu faul bin!)
 

milanwb

Aktives Mitglied
Hi, kann Style nicht so initialisieren:

E:\netBeans\TEST\src\LinkEditorPane.java:15: javax.swing.text.Style is abstract; cannot be instantiated
Style a = new Style();

Dann werd ich gleich mal unter Document ein bissl forschen :)
Danke auf jedenfall schon mal für deine Hilfe!
 

Tobias

Top Contributor
ACHTUNG: Obiger Link ist ein Affialiate-Link, der nichts, aber auch gar nichts mit dem eigentlichen Problem zu tun hat!

Ein Mod sollte sich da mal bitte drum kümmern.

mpG
Tobias
 

milanwb

Aktives Mitglied
Hi,

hab jetzt noch was rumgeklickt, aber auch nicht wirklich was gefunden. Was ich noch gefunden hab war dies (jedoch will das nicht so laufen wie ich dachte...)


Code:
int pos  = pane.viewToModel(new java.awt.Point(evt.getX(), evt.getY()));
        
        Style s = pane.getStyledDocument().getLogicalStyle(pos);


        try {


        AttributeSet at = s.copyAttributes();    
                
        if (StyleConstants.isUnderline(at)) {
            doc.insertString(doc.getLength(), "klappt\n", at);
        }else {
            doc.insertString(doc.getLength(), "nöööö\n", at);
}

Ist in diesem Script vielleicht ein Fehler drinnen? Oder funktioniert es nicht so? Vielleicht hat ja noch jemand eine andere Idee"

Mfg

Micha
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JTextPane + HTMLEditorKit withe space problem Allgemeine Java-Themen 0
T TextArea, JTextPane, JEditorPane Allgemeine Java-Themen 11
P JTextPane mit Java (eclipse) Syntax Highlighting Allgemeine Java-Themen 4
E JTextPane.getText() funktioniert nicht Allgemeine Java-Themen 15
H JTextPane JPopupMenu anfügen Allgemeine Java-Themen 2
R JTextPane (JEditorPane) ignoriert JScrollPane Allgemeine Java-Themen 5
O java StreamCorrupted Error beim Belegen einer JTextpane Allgemeine Java-Themen 5
Y Zeichen verschiedenfarbig in einer JTextPane darstellen Allgemeine Java-Themen 17
G JTextArea vs JTextPane Allgemeine Java-Themen 2
M Roll Over Effekt bei JTextPane Allgemeine Java-Themen 3
H JTextPane -- Text anfügen Allgemeine Java-Themen 3
T JEditorPane oder JTextPane Applets und Flash anzeigen Allgemeine Java-Themen 7
S Generellen MausKlick am PC erkennen Allgemeine Java-Themen 1
K Farbe erkannt = agieren, per Mausklick etc. Allgemeine Java-Themen 47
M Input/Output Mausklick außerhalb des Frames registrieren Allgemeine Java-Themen 2
S per Mausklick Position ermitteln Allgemeine Java-Themen 8
Maxim6394 Grafik zu Mausklick-Koordinate bewegen Allgemeine Java-Themen 18
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
L Mausklick simulieren Allgemeine Java-Themen 4
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S Mausklick außerhalb des Programms erzeugen? Allgemeine Java-Themen 23
M datei über rechten mausklick aus explorer in programm laden Allgemeine Java-Themen 4
N JList mit Mausklick auf einen JButton scrollen Allgemeine Java-Themen 28
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
C Aus MEHREREN Excel Tabellen bestimmte Zelle addieren Allgemeine Java-Themen 1
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
X Schauen ob eine bestimmte .exe geöffnet ist Allgemeine Java-Themen 7
J Bestimmter Buchstabe = bestimmte Zahl Allgemeine Java-Themen 10
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
A Bestimmte Sonderzeichen im Regulären Ausdruck Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
R Bestimmte Tasten abgreifen Allgemeine Java-Themen 3
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
Iron Monkey RandomAccessFile - Bestimmte Filesize begrenzen Allgemeine Java-Themen 4
L Programm um eine bestimmte Uhrzeit ausführen Allgemeine Java-Themen 4
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
E Wie Arraylisten auf bestimmte Art durchlaufen? Allgemeine Java-Themen 3
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
S Java Excel bestimmte Zellen auslesen (POI HSSF) Allgemeine Java-Themen 11
S bestimmte Strings spliten! Allgemeine Java-Themen 7
G bestimmte Files suchen Allgemeine Java-Themen 2
A Bestimmte JVM verwenden Allgemeine Java-Themen 13
A bestimmte Zeichen aus einem String auslesen Allgemeine Java-Themen 2
L Wie für ein bestimmte JVM-Version kompilieren? Allgemeine Java-Themen 2
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P JSlider nur bestimmte werte geben Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
T Bestimmte bytes in einer Datei ersetzen? Allgemeine Java-Themen 4
D Vektor - bestimmte Werte auslesen. Allgemeine Java-Themen 3
A bestimmte Taste an Server verschicken Allgemeine Java-Themen 11
G Einem Programm eine bestimmte Rechenzeit zuteilen Allgemeine Java-Themen 3
8 Programme für bestimmte Dateitypen finden Allgemeine Java-Themen 6
S Bestimmte Tasten mit der Robot Klasse? Allgemeine Java-Themen 4
G Bestimmte Dateien aus Verzeichnis löschen Allgemeine Java-Themen 5
G Nur bestimmte Variablen einer Klasse übernehmen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben