# JPanel Inner-Padding



## Guest (12. Feb 2007)

Hallo miteinander,

ich brauche in einem aktuellen Projekt ein Label mit abgerundeten Ecken.
Also habe ich JPanel überschrieben, paintComponent überschrieben usw. funktioniert auch soweit.

Jetzt brauch ich allerdings eine Möglichkeit, wie ich den für Child-Komponenten zur Verfügung stehenden Raum innerhalb des Panels limitieren kann. Bei einem Panel mit abgerundeten Ecken kann eine Komponente schließlich nicht ganz in die Ecke.

Danke schon mal im Voraus für Eure Antworten.


----------



## Gast (12. Feb 2007)

Da du die ChildComps doch eh in das Panel setzen musst kannst du dabei ja aufpassen das sie nicht bis an den Rand gehen, das Prob das du beschreibst tritt IMO nur bei so Sachen wie JDesktop auf, oder?

Ich glaub den nutzbaren Raum im JPanel kannste so nicht einschränken, was du aber machen kannst ist in das gerundete Panel ein anderes Panel reinsetzen, das mit setBounds auf dir richtige Position setzen und in der Fläche begrenzen. Da kannst du dann deine ChildComps auch draufadden. Ist aber auch nur ein Workarround, vllt hab ich auch dein Problem nicht genau verstanden


----------



## MrFox (12. Feb 2007)

Ja, wenn ich die ChildCompos ohne LayoutManager reinsetze ist das kein Problem, wenn ich allerdings einen
LayoutManager verwende, dann führt das zu Problemen, die Compos rutschen halt mal in die abgerundete Ecke rein


----------



## Gast (12. Feb 2007)

Ahja, ist klar das Problem. Setz halt ein anders Panel rein, und setz bei dem die Border so hoch (setBorder(BorderFactory.createEmptyBorder(x,x,x,x))) das die abgerundeten Ecken komplett von den Bordern abgedeckt werden. in dem Panel kannst du dann mit deinem LayoutManager 
weiterarbeiten. Nachteil ist aber das du an den Waagerechten und den Senkrechten Verlust machst, weil da ja auch die Border sind .


----------



## Gast (12. Feb 2007)

Kannst aber auch glaub ich ne Box benutzen, die kann auch Border und glaub ich auch Layouts. sicher bin ich mir aber grad nicht


----------



## WieselAc (12. Feb 2007)

Ich würd dir auch zu der Idee mit der Border raten, allerdinds glaub ich sollte es auch reichen, wenn du der, von dir editierten "Vaterklasse", diese Border setzt. Dann musst du keinen zusätzlichen kontainer adden.

PS: Mich würd mal interessieren, wie du das mir den runden Ecken gemacht hast. Könntest du den Code hier posten?


----------



## MrFox (12. Feb 2007)

setBorder wars, was ich gesucht hab. Das erfüllt bloß eine weitere Anforderung nicht, die ich vergessen hab zu schildern .
Wenn ich das Panel verkleinere, sodass eine ChildCompo nicht mehr hineinpasst, wird diese nicht bei den Borders, sondern erst beim eigentlichen Rand des Panels abgeschnitten. Das ist ein Problem, was auch ohne LayoutManager auftritt.


----------



## MrFox (12. Feb 2007)

Grad hersausgefunden: Mit BorderLayout gehts, der zieht meine Komponente bei einer Größenänderung jedoch über die maximale Größe hinaus. 

Eigentlich sollte die ChildCompo eine normale Größe haben, die nie überschritten wird, bei Verkleinerung des Panels sollte sie abgeschnitten werden, allerdings unter Berücksichtigung der Borders. Positioniert sein sollte sie immer in der Mitte des Panels. Vielleicht weiß ja jemand wie man diesen Effekt am besten erzielen kann...


----------



## MrFox (12. Feb 2007)

Das mit den runden Ecken ist fast zu simpel, um es hier zu posten:


```
public void paintComponent(final Graphics g) {
	g.setColor(this.getBackground());
	g.fillRoundRect(0, 0, this.getBounds().width, this.getBounds().height,
		rundungszahl, rundungszahl);
    }
```


----------

