# Ausgabemöglichkeit für Verlauf gesucht



## Neolity (11. Mai 2007)

Hallo,

folgendes Problem:

Ich versuche mich gerade an einem kleinen Bildbearbeitungsprogramm. Ich möchte Bilder einlesen, die Größe verändern und die Bilder danach wieder speichern. Das klappt auch alles schon ganz gut.
Doch nun wollte ich eine Art "Chronik" oder "History" oder wie auch immer man das nennen mag erstellen. In einem Panel im unteren Bereich des Fensters sollen die letzten Aktionen des Users angezeigt werden, wie zum Beispiel "Bild xxx wurde geladen" oder "Bild xxx wurde in x * y konvertiert". Doch es sollen nicht nur die letzte, sondern auch alle anderen Meldungen angezeigt werden. Mein Problem besteht nun darin eine geeignete Ausgabemöglichkeit zu finden. Ich hab es bereits mit einem JLabel versucht, doch wenn ich mit setText() den Inhalt verändere, dann verschwindet ja die 
letzte Aktion und es steht nur die aktuelle dort.
Ich arbeite mit Swing.

Ich hoffe ihr versteht was ich meine und könnt mir helfen.

Mfg Florian


----------



## doctus (11. Mai 2007)

Vielleicht JTextArea und die append()-Methode?

http://java.sun.com/javase/6/docs/api/javax/swing/JTextArea.html

Lg doctus


----------



## Neolity (11. Mai 2007)

Danke, werd ich mir gleich mal anschauen. Hört sich auf den ersten Blick recht interessant an. Aber kann man denn dann  trotzdem mit Farben und verschiedenen Größen arbeiten?


----------



## JPKI (11. Mai 2007)

Füge dem JLabel noch neuen Text in folgender Methode hinzu:

```
jlabel.setText(jlabel.getText()+neuerText);
```


----------



## doctus (11. Mai 2007)

JTextArea erbt von java.awt.Component, erbt also alle dessen Methoden, zb:

 void 	setFont(Font f)
          Sets the font of this component.
 void 	setForeground(Color c)
          Sets the foreground color of this component.

Lg doctus


----------



## Neolity (11. Mai 2007)

hmm, also es funktioniert sowohl mit TextArea und append, als auch mit TextField und der Konstruktion getText und setText. Doch dadurch haben sich nun 2 weitere Probleme ergeben. Das 2. halte ich für wesentlich schwerwiegender, wenn nicht sogar so ohne weiteres für unlösbar.

1.) Bisher habe ich mit "<html> hier steht ein text 
 </html>" einen Zeilenumbruch eingefügt. Das funktioniert jetzt aber mit beiden Versionen nicht mehr!

2.) Ich möchte die einzelnen Meldungen in anderen Farbe anzeigen lassen. Das heißt die Meldung für Speichern soll beispielsweise blau, die für das verkleinern grün sein. Aber ich kann doch mit setForeground nur die Farbe für die ganze Komponente einstellen, oder?


----------



## doctus (11. Mai 2007)

zeilenumbruch mit /n im string, zb: 

text.append("text\n");

zum 2. fällt mir spontan nichts ein. ich guck nachher mal.

lg doctus


----------



## Neolity (11. Mai 2007)

ok, das funktioniert!
Vielen Dank!

Bleibt noch das 2. Problem...

Ansonsten versuche ich jetzt erstmal ein ScrollPane auf das Textfeld zu bekommen. Aber das will noch nicht so wirklich klappen!


----------



## Tr3kk3r (11. Mai 2007)

Neolity hat gesagt.:
			
		

> ok, das funktioniert!
> 
> Ansonsten versuche ich jetzt erstmal ein ScrollPane auf das Textfeld zu bekommen. Aber das will noch nicht so wirklich klappen!



versuchs doch mal andersrum.. pack das textfeld auf die scrollpane:


```
textfeld = new JTextFiled();
		scrollpane = new JScrollPane(textfeld);		
		scrollpane.setSize(xx, yy);
		scrollpane.setLocation(xx,yy);
		jpanel.add(scrollpane);
```


----------



## Neolity (11. Mai 2007)

Tr3kk3r hat gesagt.:
			
		

> versuchs doch mal andersrum.. pack das textfeld auf die scrollpane:
> 
> 
> ```
> ...



das funktioniert bei mir nicht wirklich:

feedback ist mein JPanel und text meine JTextArea.


```
JScrollPane scrollpane = new JScrollPane(text);
		feedback.add(scrollpane);
		add(feedback, BorderLayout.SOUTH);
```

Es gibt zwar keine Fehlermeldung, aber wenn ich das Programm ausführe, dann:

- habe ich zwar ein Textfeld am unteren Rand des Frames, doch keine Spur von einer ScrollPane
- meine Nachrichten, die sonst nach einem Buttondruck erschienen sind, erscheinen nicht
- bzw. wenn sie erscheinen, dann dehnt sich das Textfeld nach jeder Eingabe eine Zeile aus und bedeckt nach einer Zeit den ganzen Frame. *

Genau das möchte ich ja mit einer ScrollPane verhindern.
Muss ich evt. mit setMaximumSize() die Größe des Panels oder der TextArea verändern? Das hat in beiden Fällen nicht funktioniert.

______________________________
* Die Einträge erscheinen, wenn ich am unteren Rand das Fenster etwas vergrößere. Muss ich eventuell etwas mit getContentPane() machen?


----------



## doctus (11. Mai 2007)

damit die scrollleiste erscheint, musst du noch folgende methoden aufrufen:

scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

für das andere, poste am besten ein bisschen mehr code

lg doctus


----------



## JPKI (12. Mai 2007)

@Neolity: Zu deinem 2ten Problem:
Schreib' doch eine Methode, die die Farbe mittels Parameter und HTML-Tags einstellt, etwa so:

```
public void addTextInFarbe(String text, String farbe) {

 String fertigZumAnhängen, String tag;

  if (farbe.equals("rot"))
  tag = "<font color=red>"
  else if (farbe.equals("blau"))
  tag = "<font color=blue>"
  else if (farbe.equals("grün"))
  tag = "<font color..." //Halt so lange weitermachen wie du willst

  fertigZumAnhängen = tag + text + "</font color></html>"; //ggf. noch vor die "tag"-Variable ein "
" hängen, für Zeilenumbruch
  jlabel.setText(jlabel.getText().substring(0,jlabel.getText().lenght-7)+fertigZumAnhängen);
}
```
Bei der letzten Codezeile gehe ich davon aus, dass die letzten 7 Buchstaben des JLabel-Textes die Zeichenfolge "</html>" sind, die werden abgeschnitten und dann der neue Text hinzugefügt.


----------

