Ich konnte nirgends etwas schlaues finden, deshalb frage ich hier mal nach. Gibt es irgendeine Klasse, mit der man etwas ähnliches wie einen durchsichtigen Button, einfach in einem laufenden Text machen kann. Also wie eben Links in HTML. Ich stelle es mir dann so vor, dass ich dann einen ActionListener oder etwas ähnliches dranhängen kann, und so das, was beim anklicken geschehen soll, selbst programmieren kann.
Dies wäre zum Beispiel sehr praktisch für eine Hilfefunktion in meinem Programm.
Wenns das nicht gibt, dann komme ich wohl nicht drum herum, mir sowas selbst zu basteln.
Wir wäre es mit einen Label mit MouseListener dem ein Thread den Text ständig anpasst? Hab grad nichts im Kopf, bin mir aber fast sicher, dass das hier schon öfters vorkam.
Aber überdenke lieber noch mal, ob ein laufender Text in einen Programm sinnvoll ist. Wenn du dann noch 2 oder 3x solche Animationen einbaust kommt man sich wahrscheinlich vor wie auf Homers erster Website.
Aber überdenke lieber noch mal, ob ein laufender Text in einen Programm sinnvoll ist. Wenn du dann noch 2 oder 3x solche Animationen einbaust kommt man sich wahrscheinlich vor wie auf Homers erster Website.
Ok, das stimmt. Aber für eine einfache Hilfefunktion braucht man ja auch nicht unbedingt Animationen und co.
Wenn ich das ganze nun in eine JTextArea packen will, dann kann man aber meines Wissens keine JLabels dort reintun. Aber soviel ich weiss kann man ja HTML dort reintun. Doch mit HTML kann ich mich wiederum schlecht auf das Programm selbst beziehen... :noe:
So stecke ich nun in der Zwickmühle...
Du kannst mit einen JEditorPane (oder wars JTextPane?) Text klickbar machen und so Events auslösen. Ist aber ein Kapitel für sich.
Edit: Hab mal meine Klassen durchsucht. Gelöst hab ich das damals per JEditorPane, hab ein Object "LINK" als AttributSet hinzugefügt und mit diesen MouseListener die Aktion durchgeführt:
Java:
privateclassMouseControllerextendsMouseAdapter{privateboolean handCursor;publicvoidmouseMoved(MouseEvent e){Element c =characterElementAt(e);if(c !=null){if(c.getAttributes().getAttribute(LINK)!=null){if(!handCursor){setCursor(newCursor(Cursor.HAND_CURSOR));
handCursor =true;}}elseif(handCursor){setCursor(newCursor(Cursor.TEXT_CURSOR));
handCursor =false;}}}publicvoidmousePressed(MouseEvent e){if(!SwingUtilities.isLeftMouseButton(e)){//Warum ich das so gemacht habe ist mir nicht klar.return;}Element c =characterElementAt(e);if(c ==null){return;}Object linkAttribute = c.getAttributes().getAttribute(LINK);if(linkAttribute !=null){
model.openArticle(linkAttribute.toString());//<- Die Aktion bei Linkklick.}}privateElementcharacterElementAt(MouseEvent e){JEditorPane p =(JEditorPane) e.getComponent();Position.Bias[] bias =newPosition.Bias[1];int position = p.getUI().viewToModel(p, e.getPoint(), bias);if(bias[0]==Position.Bias.Backward&& position !=0){--position;}Element c =((StyledDocument) p.getDocument()).getCharacterElement(position);return(c);}}
Genial, genau sowas hab ich gesucht. Vielen Dank. :toll:
Übrigens: Es sollte eigentlich beides gehen. TextPane und EditorPane.
EditorPane ist einfach die Mutterklasse von TextPane.