Toon posts:

[Java Swing]Plaatje in JTextPane

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een plaatje weergeven in een JTextPane.
Dat plaatje moet gewoon netjes tussen te tekst komen (het gaat om smilies).
Ik had zoiets, maar het enige wat er dan gebeurd is is dat mn computer dan een BLEEP maakt.
code:
1
2
Icon icon = new ImageIcon ("img/smile.gif");
tekstvak.insertIcon (icon);

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kijk eens in de Stylepad demo in je J2SDK, wellicht dat je daar de goede constructie uit kunt halen.

Ik zie aan dit kleine code fragement zo ook niet wat er mis kan zijn.....

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • drice
  • Registratie: December 2000
  • Laatst online: 09:51

drice

Loading...

code:
1
2
Icon icon = new ImageIcon ("img\\smile.gif");
tekstvak.insertIcon (icon);

Die \\ moeten volgens mij anders

Did you know that IF is a middle word in life. "Ja maar wie ben ik om aan mezelf te twijfelen"


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
drice: Die \\ moeten volgens mij anders
Over het algemeen gaat die / behoorlijk goed als scheidingsteken op (L|U)nix en MS Windows. Als je het echt netjes wilt doen moet je natuurlijk de system property nemen, maar over het algemeen zou de / oplossing geen problemen op moeten leveren....

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Daar zit het hem niet in, ik heb alle mogelijke manieren om een / neer te zetten al geprobeert :P

Dit heb ik ook nog geprobeert: zelfde resultaat :(
code:
1
2
3
Image image = getImage(getDocumentBase(),"img\smile.gif");
Icon icon = new ImageIcon (image);
tekstvak.insertIcon (icon);

In die demo lijken ze nog iets te doen met een ResourceBundle, enig id of dat er nog iets mee te maken kan hebben?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Paul: In die demo lijken ze nog iets te doen met een ResourceBundle, enig id of dat er nog iets mee te maken kan hebben?
Nee, dat kan niet de oorzaak zijn dat het daar wel werkt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Er zijn twee zaken die je moet checken:

Ten eerste wordt de image geladen, ten tweede wordt de image weergegeven.

Ik zou die aanmaak van imageicon (<filename>) vervangen door new imageicon(<een Image die je aangemaakt hebt in je java, ding is bijvoorbeeld helemaal rood.>)

Als dat lukt, dat je dus een rood icontje kan weergeven in je applicatie, dan weet je dat die alle code die te maken heeft met weergeven van de imageicon in de text goed gaat. Vervolgens kun je je concentreren op het correct laden van het plaatje.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Als men even ind e api doc had gekeken dan wist men dat de foward slash DE JUISTE manier was:
Creates an ImageIcon from the specified file. The image will be preloaded by using MediaTracker to monitor the loading state of the image. The specified String can be a file name or a file path. When specifying a path, use the Internet-standard forward-slash ("/") as a separator. (The string is converted to an URL, so the forward-slash works on all systems.) For example, specify:
new ImageIcon("images/myImage.gif")
Nog een tip. Wacht totdat het plaatje geladen is met een Mediatracker. Mijn vermoeden is dat je plaatje al weergegeven wordt voordat ie geladen is, wat als gevolg heeft dat je niets ziet.

Edit:
Wat is een mediatracker??

Een voorbeeldje zoals ik hem gebruik in een Applet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
String loading = getParameter("loading");
Image loadingImg = getImage(getCodeBase(), loading);

// mediatracker aanmaken die bijhoudt of een plaatje geladen is.
MediaTracker tracker1 = new MediaTracker(this);

tracker1.addImage(loadingImg, 0);

try {tracker1.waitForID(0);}
catch (InterruptedException e) {return;}
if(tracker1.isErrorID(0))
{errorWriter.println("*loadingimage load error, value was: -" + loading + "-* ");}

Die errorWriter is iets wat ikzelf gebouwd heb, wordt gebruikt om informatie terug te sturen naar een server. Details daarvan hou ik voor me.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
http://java.sun.com/docs/books/tutorial/uiswing/components/simpletext.html (#textpane)

heb je daar al gekeken?

er worden eerst een aantal styles gedefinieerd, en dan wordt per stuk tekst aangegeven welke gebruikt moet worden. misschien werkt dat.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
The - DDD: Nog een tip. Wacht totdat het plaatje geladen is met een Mediatracker. Mijn vermoeden is dat je plaatje al weergegeven wordt voordat ie geladen is, wat als gevolg heeft dat je niets ziet.
Ik denk niet dat dat nodig is.... ImageIcon zorgt zelf al voor deze monitoring. Je een Icon toe en die tekent zichzelf op een Component. Ik denk dat dit dus wel goed moet gaan :) (Ik gebruik in ieder geval nooit meer een MediaTracker voor plaatjes in Swing).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
marcusk:

Sorry gaat niet werken. De JTextPane in dat voorbeeld werkt met HTML opgemaakte text. Wat de topicstarter doet is runtime zelf een plaatje laden en die op de locatie van de caret plaatsen. Bijna hetzelfde, maar wel net iets anders.

HTML wordt door Swing componenten zelf redelijk goed verwerkt. Denk echt dat het te maken heeft met het niet wachten op het laden van de ImageIcon.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op zaterdag 16 februari 2002 11:57 schreef mbravenboer het volgende:

[..]

Ik denk niet dat dat nodig is.... ImageIcon zorgt zelf al voor deze monitoring. Je een Icon toe en die tekent zichzelf op een Component. Ik denk dat dit dus wel goed moet gaan :) (Ik gebruik in ieder geval nooit meer een MediaTracker voor plaatjes in Swing).
Ben zelf ook wel benieuwd wat de bevindingen van de topic starter zijn :)

Maar die forward slash is wel goed... :P

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
The - DDD: Ben zelf ook wel benieuwd wat de bevindingen van de topic starter zijn :)
Idd... zal zo anders zelf wel ff een test gaan schrijven...
Maar die forward slash is wel goed... :P
Zeker :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 16 februari 2002 11:57 schreef The - DDD het volgende:
marcusk:

Sorry gaat niet werken. De JTextPane in dat voorbeeld werkt met HTML opgemaakte text. Wat de topicstarter doet is runtime zelf een plaatje laden en die op de locatie van de caret plaatsen. Bijna hetzelfde, maar wel net iets anders.
Er worden een JEditorPane en een JTextPane gebruikt in het voorbeeld. De eerste werkt idd met HTML, maar de JTextPane met styles (die ondersteunt toch niet eens HTML?).

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
marcusk:

Dat zou heel goed kunnen, heb het voorbeeld op jou link vluchtig doorgekeken. Moet wel zeggen dat ik met Swing nog weinig gewerkt heb.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Is het al gelukt?

Is je het nog niet voor elkaar hebt kan ik wel even een kleine demo schrijven. Er komen wel vrij vaak problemen met de JTextPanes naar voren (zeker in samenwerking met smilies ;) ), dus dat is wel algemeen nuttig...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Nou ik ben nog even wat aan het rommelen geweest, en helaas zonder resultaat. Het plaatje word overigens wel gewoon goed geladen, als ik het gewoon op het scherm laat teken doet hij het.

Een demo zou zeer welkom zijn mbravenboer! :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Paul: Een demo zou zeer welkom zijn mbravenboer! :)
* mbravenboer zal eens kijken wat hij kan doen :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • nxt
  • Registratie: November 2001
  • Laatst online: 26-08 13:51

nxt

het is niet zo heel erg moeilijk als je gebruik maakt van styles, nadeel hiervan is dat je voor elk ImageIcon een style moet aanmaken.
Maar voor alle duidelijkheid die insertIcon method heeft het bij mij nog nooit gedaan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void initStyles(JTextPane textPane) {
    Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
    
    Style regular = textPane.addStyle("regular", def);
      StyleConstants.setFontFamily(def, "SansSerif");
    StyleConstants.setFontSize(def, 12);
    
    Style s = textPane.addStyle("icon", regular);
      StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
      StyleConstants.setIcon(s, new ImageIcon("d:/tezt.gif"));
      
    Style s = textPane.addStyle("animated-icon", regular);
      StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
      StyleConstants.setIcon(s, new ImageIcon("d:/tezt_ani.gif"));
      
}
public void addStyledText(JTextPane textPane,String style, String message) {
    Document doc = textPane.getDocument();
    try {
        doc.insertString(doc.getLength(), message ,textPane.getStyle(style));
      } catch (BadLocationException ble) {
        System.err.println("Sorry, error inserting text:\n"+ble);
      }
}

en dan 1x initStyles aanroepen
en daarna kun je met addStyledText een van de styles toepassen,
in dit geval zou de String style: "icon" of "animated-icon" kunnen zijn voor een gifje.
hopelijk heb je hier iets aan

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ok, ik heb een demo gemaakt :) .

Je kunt hem via Java Web Start bekijken. Je hebt wel 1.4.0 nodig. In de JNLP file staat nog 1.3+. Ik had geen zin meer om dat nog aan te passen ;) .

Het spreekt verder voor zich: knoppies klikken is emotions invoegen op de plek van de cursor :) . Werkt allemaal als een trein.

Je kunt de source hier downloaden. Hierin zit ook een executable jar. Als je geen Java Web Start hebt kan je die jar dus ook gewoon zelf draaien. Ook hiervoor geldt dat je 1.4.0 nodig hebt (overigens slechts voor een detail: rollover buttons in de toolbar, de rest werkt ook in oudere Java versies).

Ik gebruik voor enkele zaken de Java Generics, als je de source code wilt rippen moet je dat zelf maar even aanpassen naar casts ( :r ).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Bij mij geeft ie een error over dat setRollover() in JToolbar niet aangeroepen kan worden ofzo :? Werkt dus blijkbaar alleen met 1.4 :)

edit: Ben nog niet wakker, zie net dat dat hierboven staat beschreven |:(

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Is het hiermee gelukt?

Ik heb natuurlijk niet voor de lol in het holst van de nacht met JTextPanes zitten werken ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op maandag 18 februari 2002 19:50 schreef mbravenboer het volgende:
Snif ;( .

Al resultaat?
Demo draait goed hoor :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MisterData: Demo draait goed hoor :)
Das al heel wat, nu nog onze topic-starter ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TheDuke
  • Registratie: Juni 1999
  • Niet online
nu we het toch over images in textpanes hebben...

Weet iemand een workaround voor het probleem dat wanneer je deze rtf's opslaat de images niet mee worden opgeslagen alsook niet mee worden geladen bij het openen van zo'n bestand ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ondersteunt RTF uberhaupt wel afbeeldingen?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • nxt
  • Registratie: November 2001
  • Laatst online: 26-08 13:51

nxt

de wordpad van windows ondersteund afbeeldingen in een rtf-file,
maar of ze dan nog aan de standaard voldoen weet ik natuurlijk niet (het is tenslotten een MS product)
Pagina: 1