# aus string smileys



## Chloroplast (9. Nov 2011)

gibt es eine (einfache) möglichkeit aus einem string ein string mit bilder zu machen (smileys wie bei facebook zB.) ?


----------



## XHelp (9. Nov 2011)

Ein String hat der Definition keine Bilder in sich. Alles andere ist nur Renderer-Sache.
Wo willst du es letztendlich darstellen?


----------



## Chloroplast (9. Nov 2011)

es ist so ne art chat programm, und ich will einfach dass we man "" eingibt oder so was das dann  erscheint. das ganze mache ich rel. einfach in paint(Graphics g) mit g.drawString("das was das steht, in meinem fall als variable",2,30);


----------



## XHelp (9. Nov 2011)

Hm, ein Chat ohne Copy-Möglichkeit... hm.
Benutz doch einfach html für das darstellen des Verlaufen, dann kannst du die smiley einfach als <img>-Tags reinsetzen.


----------



## Chloroplast (9. Nov 2011)

um genau zu sein, mein programm ist etwas umfangreicher, so wird alles erstmal in ein array gebracht und von da in ner for schleife dann an den bildschirm geworfen. heisst das das es so gut wie nicht geht?


----------



## XHelp (9. Nov 2011)

Naja, du könntest es genau so geht auch mit 
	
	
	
	





```
g.drawImage
```
 machen, aber das macht nur bedingt Sinn


----------



## Chloroplast (9. Nov 2011)

ich meinte obs dafür irgentwelche klassen von string gibt, oder ne andere variablenart
das mit drawImage könnte ich auch, würde aber viel code mitsich bringen


----------



## XHelp (9. Nov 2011)

Wie gesagt: das was du vorhast hat nichts mit String zu tun.
Ich sehe aber kein Problem die Ausgabe auf html und dafür geeignete Componenten umzubieten. Das wäre auf jeden Fall sinnvoller, als irgendwas mit drawString zu machen.


----------



## Tomate_Salat (9. Nov 2011)

Wie wäre es mit einem JTextPane?

How to Use Editor Panes and Text Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Chloroplast (10. Nov 2011)

also würde ein gutes beispiel sehr gut finden, wie ich das auf html ebene machen soll hab ich keine ahung. auch ier wäre ein beispiel hilfreich


----------



## ARadauer (10. Nov 2011)

mhn du könntest dir ein vBulletin board runter laden und schaun wie die das machen  weil anscheinend funktioniert das ja ;-)

aber generell ist es nix anderes als ein 
post.replaceAll("", "<img src='smiley.gif' />")


----------



## faetzminator (10. Nov 2011)

Und noch ein [c]<html>[/c] bzw. [c]</html>[/c] um den ganzen Content


----------



## Chloroplast (10. Nov 2011)

also rein theoretisch so: 

```
String post ="Laber hust :)"; 
<html>String postWithSmiley = post.replaceAll(":)", "<img src='smiley.gif' />") </html>

public void paint(Graphics g){
          g.drawString()
}
```

oder wie? sorry wenn ich irgentwen nerve, mit komischen fragen


----------



## Gossi (10. Nov 2011)

Chloroplast hat gesagt.:


> also rein theoretisch so:
> 
> ```
> String post ="Laber hust :)";
> ...



Das <html> war darauf bezogen, das deine html datei dann so aussehen muss:


```
String post ="Laber hust :)"; 
String postWithSmiley = post.replaceAll(":)", "<img src='smiley.gif' />")
```


```
<html>
<body>
<p><b>Person A:</b> Laber hust <img src='smiley.gif' /></p>
</body>
</html>
```

Und das sieht dann so aus:

*Person A:* Laber hust


----------



## faetzminator (10. Nov 2011)

Das wird nicht funktionieren 
[c]""[/c] ist ein Regex. Aber wir wollen die Klammer als Klammern, also quoten wir den String doch einfach: [c]Pattern.quote("")[/c]. Ebenfalls muss beim zweiten Argument beachtet werden, dass [c]$[/c] dort einer Spezialbehandlung unterzogen werden müssen.


----------



## Chloroplast (10. Nov 2011)

also jetzt steig ich garnicht mehr durch...

die java Strings sind ja variabel, warum steht dann in der html der String?
und mir fällt gerad auf... ich habe keine html ist ja ein JFrame


----------



## faetzminator (10. Nov 2011)

Das JFrame kann HTML interpretieren.


----------



## Chloroplast (10. Nov 2011)

und wie? ich versteh das nicht wirklich... soll ich jetzt dafür ne eigen html schreiben oder wie?:bahnhof:
wie schon gesagt, entschuldige mich bei allen die ich nerve


----------



## faetzminator (10. Nov 2011)

Es genügt, deinen String einfach in [c]<html>[/c] und [c]</html>[/c] einzuschliessen. Dann kannst du da drin auch Images - eben mit HTML - einbetten.


----------



## Chloroplast (10. Nov 2011)

könntest du mir bitte noch ein beispiel machen, ich kann mir so schwer was vorstellen


----------



## faetzminator (10. Nov 2011)

Wie bereits oben geschrieben....

```
String post = "Laber hust :)"; 
post = post.replaceAll(Pattern.quote(":)"), "<img src=\"smiley.gif\"/>");
post = "<html>" + post + "</html>";

deineGuiKomponente.drawString(post); // oder drawXY() oder was auch immer
```


----------



## Chloroplast (10. Nov 2011)

was ist Pattern? das findet mein JCreater nicht hier die fehlermeldung:

symbol  : variable Pattern
location: class ChatFrame
				String post = message.replaceAll(Pattern.quote(""), "<img src=\"smiley.png\"/>");
				                                 ^
Note: C:\Users\user\Desktop\JAVA\Documentation\100620-Lox3\OnePCChat\src\ChatFrame.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error


----------



## faetzminator (10. Nov 2011)

[japi]Pattern[/japi]


----------



## Chloroplast (10. Nov 2011)

hab das jetzt mit dem smiley aus  gelöst

jetzt steht im chat sowas aus "hey na "
wird:
<html>hey na<img src="smiley.png"/><html>

hab das Pattern jetzt einfach übergangen also:
	
	
	
	





```
String post = message.replaceAll(":D", "<img src=\"smiley.png\"/>");
```


----------



## faetzminator (10. Nov 2011)

Wieso importierst du es nicht einfach?

```
import java.util.regex.Pattern;
```
Wenn du eine ganze Reihe Smileys hast, kann man den Code dann noch wunderbar mit einer Map machen:

```
private Map<String, String> smileys = new HashMap<String, String>();
{
    smileys.put(":)", "smiley.jpg");
    smileys.put(":D", "irgendwas.png");
    smileys.put(":(", "ichBinAuchEinEasteregg.gif");
}

public String convertSmileys(String input) {
    for (Map.Entry<String, String> smiley : smileys.entrySet()) {
        String key = Pattern.quote(smiley.getKey());
        String value = "<img src=\"" + smiley.getValue() + "\"/>";
        input = input.replaceAll(key, value);
    }
    return input;
}
```


```
String post = "Laber hust :)"; 
post = convertSmileys(post); 
deineGuiKomponente.drawString(post); // oder drawXY() oder was auch immer
```

Aber das musst du (noch) nicht alles verstehen, nur als Input für dich gedacht.


----------



## Chloroplast (10. Nov 2011)

symbol  : class Map
location: class ChatFrame
	private Map<String, String> smileys = new HashMap<String, String>();
	        ^
********\src\ChatFrame.java:108: cannot find symbol
symbol  : class HashMap
location: class ChatFrame
	private Map<String, String> smileys = new HashMap<String, String>();
	                                          ^
********\src\ChatFrame.java:116: package Map does not exist
    for (Map.Entry<String, String> smiley : smileys.entrySet()) {
            ^
Note: ********src\ChatFrame.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors

Process completed.


dass kommt raus wenn ich die sachen dort einfüge...
hab die pfade weggemacht, bisschen privatsphäre waren


----------



## XHelp (10. Nov 2011)

Auch diese Sachen musst du importieren.


----------



## Chloroplast (10. Nov 2011)

welche imports wären das?


----------



## faetzminator (10. Nov 2011)

Abgesehen dass du hier im Quellcode Links hinterlegt hast, gibts hier auch die ganze Javadoc (Für alle Java SE 6 Klassen): Java Platform SE 6. Und sonst gibts immer noch Google


----------



## ARadauer (10. Nov 2011)

In Eclipse einfach Strg+Umschalt+O


----------



## Sunchezz (11. Nov 2011)

Er will damit sagen das wenn du einen String hast mit dem Text und dem "rein-Smiley" sollst du den einfach mit den Html-Tags umschließen.


```
String post ="Laber hust :)"; 
String postWithSmiley = post.replaceAll(":)", "<img src='smiley.gif' />");
postwithSmiley = "<html>" + postWithSmiley + "</html>";  // siehe unten!

myEditorPane.setContentType("text/html");
myEditorPane.setText(postWithSmiley);
```

Oder anders gesagt, einige Textkomponenten sind fähig Html selbständig zu interpretieren 

BTW: der "<html>" bzw. "</html>" Tag ist überflüssig 


EDIT: Tschuldigung... wohl die zweite Seite übersehen -.-


----------



## faetzminator (11. Nov 2011)

Na klar, wenn man [c]setContentType()[/c] verwendet, dann ist es natürlich überflüssig. Aber das hab ich sowieso noch nie gesehen. Auf welchen Components gibts das - oder vermutlich die bessere Frage: erst ab Java 7?


----------



## XHelp (11. Nov 2011)

faetzminator hat gesagt.:


> Auf welchen Components gibts das - oder vermutlich die bessere Frage: erst ab Java 7?


Noupe, JEditorPane hat das schon eine Weile: klick
Da wird es auch benutzt. Es ging vermutlich darum: wenn man jeden Post in html-Tags wrappt, ist es natürlich quatsch., dann hat man ja 
	
	
	
	





```
<html>...</html><html>...</html>
```
 usw


----------



## Chloroplast (11. Nov 2011)

jetzt gibt es keine fehler mehr, aber aus 
na  
wird jetzt 
na <img src="smiley.png"/>


----------



## Chloroplast (11. Nov 2011)

Sunchezz hat gesagt.:


> Er will damit sagen das wenn du einen String hast mit dem Text und dem "rein-Smiley" sollst du den einfach mit den Html-Tags umschließen.
> 
> 
> ```
> ...



ich hab noch nie mit nem JEditorPane gearbeitet. will in meinem code aber so wenig wie möglich ändern
hab jetzt ein String array dass ich mit ner for schleife an den bildschirm werfe...


----------



## faetzminator (11. Nov 2011)

XHelp hat gesagt.:


> Noupe, JEditorPane hat das schon eine Weile: klick



Ah so, danke. Hab ganz vergessen, dass es um die JEditorPane ging. Denn z.B. ein JLabel kann auch mit HTML umgehen, hat aber keine solche Methode.


----------



## Chloroplast (11. Nov 2011)

mir scheint er wandelt die html tags nicht in html um... der schreibt mir das stumf den quellcode wieder hin...


----------



## XHelp (11. Nov 2011)

wer ist denn "er"?


----------



## Chloroplast (11. Nov 2011)

java oder  JCreator XD bzw. das proggram. auf jedenfall scheint das nicht zu html zu werden, auch nich imi-, oder implementiert...


----------



## XHelp (11. Nov 2011)

Machst du es immer noch mit drawString?
Und "java" oder "JCreator" macht schon mal nirgendswo etwas, wenn du einen Fehler suchst, dann ist er in deinem Code


----------



## Chloroplast (12. Nov 2011)

ja, hatte aber zwischenzeitlich schon was mit nem JLabel versucht. und das der fehler im quellcode steht wusste ich eigentlich auch, damit meinte ich einfach das der string mit html-tags angezeigt wird, halt als string


----------



## XHelp (12. Nov 2011)

Mit drawString wird das nicht funktionieren.


----------



## Chloroplast (12. Nov 2011)

es funktioniert auch nicht mit dem JLabel...


----------



## XHelp (12. Nov 2011)

Ja, und wenn du dir die ersten 2 Seiten des Threads durchließt, dann steht da was von JEditorPane.
JLabel eignet sich genau so schlecht für dein Vorhaben wie auch drawString.


----------



## Gast2 (12. Nov 2011)

```
public static void main(String[] args) throws IOException {
    	JFrame frame = new JFrame("Smileys");
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.add(new JLabel("<html><img src=\"http://cdn2.iconfinder.com/data/icons/lin/128/6.png\" title=\"Smiley\"></html>"));
    	frame.pack();
    	frame.setVisible(true);
    }
```
Funktioniert 1A in nem JLabel.


----------



## Sunchezz (12. Nov 2011)

was mir noch aufgefallen ist (habs aus neugier auch nur kurz getestet), im EditorPane gings bei mir nur mit ner URL, nicht mit nem Lokalen Pfad!

Aber noch mal für den Ersteller:
Vergiss endlich drawString, das kann nicht gehen!
verrät dir aber uA. auch der Methodenname


----------



## Chloroplast (12. Nov 2011)

braucht man dafür java.IO.*; ?


----------



## XHelp (12. Nov 2011)

Guck doch in der API nach.
Ansonsten eine ähnliche Frage zum 2. mal: was denn für "dafür"? Stell doch mal eine ganze konkrete Frage...


----------



## Chloroplast (12. Nov 2011)

ok
brauche ich um mit einem JLabel html implementieren java.IO.* ?


----------



## Gast2 (12. Nov 2011)

Nein.


----------



## Chloroplast (13. Nov 2011)

und warum funktioniert es dann bei mir nicht, wenn ich es mit einem JLabel mache... dann zeigt mir das label das alles alles string an, ohne html zu berücksichtigen. Ich habs auch mal mit nem JEditorPane probiert, wie hier irgentjemand schon gesagt hatte, sber sinn und zweck eines chates ist ja sich die sachen anzeigen zu lassen uund nicht im nachhinein noch veränder bar zu machen. ausserdem sa das immer so aus. aus:
---------------------------
hi .) ich bin chloroplast 
---------------------------
wurde
---------------------------

hi .) ich bin chloroplast
---------------------------
aber es sollte ja
---------------------------
hi  ich bin chloroplast
---------------------------
dabei rauskommen
. == : (damit das forum mir die nicht umwandelt)


----------



## XHelp (13. Nov 2011)

Dann machst du was falsch :bahnhof: Vermutlich in der Zeile 7-8.

zu JEditorPane: du kannst es auch readOnly setzen.


----------



## Sunchezz (13. Nov 2011)

versuch es mal mit der gleichen Url... bzw. dem gleichen String.
also bei mir funktioniert es auch einwandfrei mit einem JLabel!

Und zu der EditorPane man kann ja alles nötige einstellen.
editable, enabled, readOnly, und was du nich willst, genau genommen kannst du die editorPane auch aussehen lassen wie ein JLabel, nur das sie mehr bietet!


----------



## Chloroplast (14. Nov 2011)

ich kann ja mal meinen code vom JFrame hier posten, sind nur viele unnötige sachen noch drin und ist auch fast nichts kommentiert, wäre das hilfreich?


----------



## XHelp (14. Nov 2011)

Das Zauberwort ist KSKB. Du schmeißt alles raus, was irrelevant ist, formatierst den Rest ordentlich und stellst es rein.


----------



## ARadauer (14. Nov 2011)

Wo probierst du das? Sitzt du hinter einer Firewall? Kann es sein, dass du mit deinem Eclipse nicht ins internet kommst?


----------



## Chloroplast (15. Nov 2011)

1. ich probirs an meinem PC, 2. ja ich sitze hinter einer firewall die java hindurch lässt, 3. ich benutze den JCreater


----------

