runde / ovale Boder für JLabel

Status
Nicht offen für weitere Antworten.
B

bananenkasper

Gast
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
 
G

Gast

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

Swoas?
 
G

Guest

Gast
Gast hat gesagt.:
Code:
JLabel label = new JLabel("fubar");
label.setBorder(new LineBorder(Color.BLACK, 1, true));

Swoas?

LineBorder ist das was ich gerade verwende...

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

Gast

Gast
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!
 
B

bananenkasper

Gast
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
 
G

Guest

Gast
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
 
B

bananenkasper

Gast
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?
 
G

Guest

Gast
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

Top Contributor
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!
 
B

bananenkasper

Gast
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?
 
G

Guest

Gast
Code:
    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);
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben