# Text in JLabel als Blocksatz?



## Rufus.Mueller (26. Jun 2011)

Ich will einen längeren Text in ein Label schreiben. Ich formatiere den Text mit html. Die Zeilenumbrüche manuel mit <br> einzufügen ist mühsam, und führt zu unschönen Resultaten. Am liebsten wäre mir daher ein Blocksatz. Habe es so versucht:



```
anweisung = new JLabel("  <html>  <p align="justify">  TEXT	 </p>  </html>");
```


Ich bekomme dann diese Meldung:



> Syntax error on token "justify", , expected



Und diese:



> The constructor JLabel(String, String) is undefined



Habe dann alternativ folgenden Code probiert:


```
anweisung = new JLabel("  <html>  <p align='justify'>  TEXT	 </p>  </html>");
```

Dann verschwinden die Fehlermeldungen, html funktioniert aber leider nicht mehr (die Steueranweisungen von html werden dann als ganze normaler Text auf dem Label ausgegeben).


----------



## Rufus.Mueller (26. Jun 2011)

Das Problem bei links- oder rechtsbündigem Format ist, dass es dann immer so aussieht als wäre das Label nicht in der Mitte des Bildschirms, auch wenn es so ist. Ist wohl eine optische Täuschung wegen des "ausgefranzten" Randes.


Gibt es noch andere Möglichkeiten einen längeren Text (max 10 Zeilen) in einem Label zu platzieren, so dass es sauber ausschaut? (außer mit Blocksätzen arbeiten.)


----------



## r.w. (26. Jun 2011)

Rufus.Mueller hat gesagt.:


> Das Problem bei links- oder rechtsbündigem Format ist, dass es dann immer so aussieht als wäre das Label nicht in der Mitte des Bildschirms, auch wenn es so ist. Ist wohl eine optische Täuschung wegen des "ausgefranzten" Randes.
> 
> 
> Gibt es noch andere Möglichkeiten einen längeren Text (max 10 Zeilen) in einem Label zu platzieren, so dass es sauber ausschaut? (außer mit Blocksätzen arbeiten.)



Justify wird, wie auch von einigen Browsern, offensichtlich nicht vom JLabel unterstützt.
Ich würde es alternativ mit einem Rahmen des JLabel, oder mit einer zentrierten Ausgabe
versuchen. 


VG ROlf


----------



## thefake (26. Jun 2011)

Das Problem warum er die HTML Tags nicht erkennt liegt an deinem JLabel



> "  <html>  <p align='justify'>  TEXT  </p>  </html>"



Hier sind Leerzeichen vor dem <html> - wenn du diese Entfernst erkennt er den HTML Teil.

"<html>  <p align='justify'>  TEXT  </p>  </html>"


----------



## r.w. (26. Jun 2011)

thefake hat gesagt.:


> Das Problem warum er die HTML Tags nicht erkennt liegt an deinem JLabel
> 
> 
> 
> ...



Das ist zwar richtig, "justify" wird aber dennoch nicht vom JLabel interpretiert.


----------



## Rufus.Mueller (26. Jun 2011)

Ob ihrs glaubt oder nicht, das Leerzeichen war tatsächlich das Problem. Jetzt geht es.


----------



## r.w. (26. Jun 2011)

Rufus.Mueller hat gesagt.:


> Ob ihrs glaubt oder nicht, das Leerzeichen war tatsächlich das Problem. Jetzt geht es.



Hast Du das wirklich mit einem mehrzeiligen Text, oder nur mit einer Zeile versucht?
Bei mir funktioniert "left", "center" und "right". Aber weder auf dem Mac, noch unter Windows XP
reagiert das JLabel auf "justify". Unter Windows 7 könnte ich erst morgen testen.

Wenn es bei Dir wirklich funktioniert, würde mich Deine Test-Umgebung interessieren.

VG ROlf


----------



## Rufus.Mueller (27. Jun 2011)

Ja, sind mehrere Zeilen. Man darf natürlich keine zusätzlichen Zeilenumbrüche mehr setzen. Ich arbeite mit XP.


----------



## Rufus.Mueller (27. Jun 2011)

Um genau zu sein, funktioniert es, wenn die Eingabe genau diese ist:


```
<p align='justify'>" + "TEXT" + "</p>  </html>")
```


----------



## r.w. (27. Jun 2011)

Rufus.Mueller hat gesagt.:


> Um genau zu sein, funktioniert es, wenn die Eingabe genau diese ist:
> 
> 
> ```
> ...



Einen Text, der aus nur einem Wort besteht, würde ich nicht unbedingt 
als ideale Eingabe für einen Test der Blocksatz-Ausrichtung bezeichnen. ;-)


----------



## Rufus.Mueller (27. Jun 2011)

Das ist nur ein Beispiel, ich wollte nicht meinen kompletten Text posten.


----------



## r.w. (27. Jun 2011)

Rufus.Mueller hat gesagt.:


> Das ist nur ein Beispiel, ich wollte nicht meinen kompletten Text posten.



Auch dann wird bei mir "justify" nicht interpretiert.

Wenn Du magst, kannst Du ja mal ein *KSKB* mit einem Beispieltext posten, der funktioniert.
Würde mich wirklich sehr interessieren.

VG ROlf


----------



## Rufus.Mueller (27. Jun 2011)

```
import java.awt.*;
import javax.swing.*;


public class Testklasse2 extends JPanel {

	

	
	public static void main (String[] args){
		
		 

		 
		     
		    
		  
		 
		        //Window
		        JFrame jframe;
		        
		        jframe=new JFrame();
		        
		        // Layout setzen
		        jframe.setLayout(new BorderLayout());
		        
		        JLabel anweisung = new JLabel("<html>  <p align='justify'>" + "Ich bin ein Text. Ich " +
		        		"muss noch etwas wachsen, um zeigen zu können, dass ich tatsächlich im Blocksatz stehe." +
		        		"Denn das tue ich, fürwahr. Ich glaube, jetzt bin ich lang genug. Bis dann" +
		        		"" + "</p>  </html>");
		        
		       // anweisung.setBackground(Color.RED);
		        anweisung.setOpaque(true);
		        anweisung.setFont(new Font("Dialog", 0, 20));
		        anweisung.setPreferredSize(new Dimension(510, 400));
		        
		        JButton weiterButton = new JButton("Experiment beginnen");
		        
		        JPanel inneresPanel = new JPanel();
		 
		        inneresPanel.setLayout(new GridBagLayout());
		        
		        GridBagConstraints c = new GridBagConstraints();
		        
		        	c.gridx = 0;
		        	c.gridy = 0;
		 
		        inneresPanel.add(anweisung, c);
		        
		        	c.gridx = 0;
		        	c.gridy = 1;
		        
		        inneresPanel.add(weiterButton, c);
		 
		        jframe.add(inneresPanel, BorderLayout.CENTER);
		        jframe.setVisible(true);
		        
		    }
		 
	}
```


----------



## r.w. (27. Jun 2011)

Ist ja ein Ding!
Das scheint tatsächlich ein Bug im JLabel zu sein, oder sieht das jemand anders?

Danke Dir vielmals. Kann man sicher noch als Workaround gebrauchen.

VG ROlf


----------

