# runde / ovale Boder für JLabel



## bananenkasper (8. Aug 2008)

Hallo Leute,

ich suche eine Border mit abgerundeten "Ecken". Sie sollte auch etwas breiter sein.
Gibt es sowas?
ich würde Sie mir ungern selbst bauen.... 

MFG


----------



## Gast (8. Aug 2008)

```
JLabel label = new JLabel("fubar");
label.setBorder(new LineBorder(Color.BLACK, 1, true));
```

Swoas?


----------



## Guest (8. Aug 2008)

Gast hat gesagt.:
			
		

> ```
> JLabel label = new JLabel("fubar");
> label.setBorder(new LineBorder(Color.BLACK, 1, true));
> ```
> ...



LineBorder ist das was ich gerade verwende...

Hätte es aber wie gesagt etwas runder...
So wie beim Mac die Buttons z.B....


----------



## Gast (8. Aug 2008)

Hm, musst mal bei codesearch.google.com suchen, da gibts einige Implementierungen.

Wenn du was schönes gefunden hast, lass es mich bitte wissen, such auch was besseres als LineBorder!


----------



## friteuse85 (8. Aug 2008)

http://www.java2s.com/Code/Java/Swing-JFC/Ovalborder.htm


----------



## bananenkasper (9. Aug 2008)

friteuse85 hat gesagt.:
			
		

> http://www.java2s.com/Code/Java/Swing-JFC/Ovalborder.htm



Das ist im Prinzip das, was ich gesucht habe!
Auch dass man den Grad der Krümmung bestimmen kann, gefällt mir sehr gut!

Allerdings stehe ich jetzt vor einem neuen Problem:
Das JLabel, um das die Border gezeichnet wird, ist "opaque".
Das JLabel ist vollständig unter der Border sichbar (inklussive "Ecken").

Gibt es eine Möglichkeit, "paintCompontent()" so anzupassen, dass es nur den Bereich zeichnet, der sich innerhalb der boder befindet??

MFG


----------



## Guest (9. Aug 2008)

bei allen swing komponenten ist nicht die abgeleitete swing komponente sondern deren uidelegate für das rendering verantwortlich. demzufolge muss du auch dessen paint methode überschreiben. das ganze ist nicht ganz trivial aber sicher noch nützlich (auch für später mal).

beispiel gibts zb. hier

http://forums.sun.com/thread.jspa?messageID=2667023


----------



## bananenkasper (12. Aug 2008)

Anonymous hat gesagt.:
			
		

> bei allen swing komponenten ist nicht die abgeleitete swing komponente sondern deren uidelegate für das rendering verantwortlich. demzufolge muss du auch dessen paint methode überschreiben. das ganze ist nicht ganz trivial aber sicher noch nützlich (auch für später mal).
> 
> beispiel gibts zb. hier
> 
> http://forums.sun.com/thread.jspa?messageID=2667023



ich weiss nicht genau was du damit sagen willst...

Wenn ich die Bereiche, die sich ausserhalb der Boder befinden, beim painten des Compontent aussparen möchte, muss ich Zuriff auf die Border haben.
wenn ich es richtig verstanden habe, habe ich in "paintComponent()" aber keinen Zugriff auf die Border, da die ja in "paintBorder()" gezeichnet wird?


----------



## Guest (13. Aug 2008)

wollte sagen: wenn du wirklich ovale komponenten willst, reicht es evt. nicht nur mit bordern zu arbeiten, weil die glaubs einfach auf die komponente gezeichnet werden. dementsprechend musst die wie gesagt die komponente selbst rendern (oder wie du sagst paint überschreiben). dazu musst du aber nicht die paint methode des labels oder whatever überschreiben sondern die paint methode des ui-delegates der komponente ... vielleicht auch nicht was du brauchst!?


----------



## byte (13. Aug 2008)

Das ganze lässt sich auch sehr schön mit dem Painter-Mechanismus von SwingX lösen.

Einfach einen _CapsulePainter_ auf die Komponente und fertig!


----------



## bananenkasper (13. Aug 2008)

byto hat gesagt.:
			
		

> Das ganze lässt sich auch sehr schön mit dem Painter-Mechanismus von SwingX lösen.
> 
> Einfach einen _CapsulePainter_ auf die Komponente und fertig!



Ich hab keine Ahnung von SwingX...
schonmal was drüber gelsen hier im Forum aber noch nie eingesetzt..

hast du dazu vielleicht ein Snipplet?


----------



## Guest (14. Aug 2008)

```
JPanel jp = new JPanel(new GridLayout());   
    jp.setBackground(Color.GREEN);   
    JXLabel myLabel = new JXLabel("Test");
    RoundRectangle2D.Double rect = new RoundRectangle2D.Double(0,0,50,50,45,45);  
    ShapePainter sp = new ShapePainter(rect);
    myLabel.setBackgroundPainter(sp);
    myLabel.setHorizontalAlignment(SwingConstants.CENTER);   
    jp.add(myLabel);
```


----------

