# JButton - Labelposition im Verhältnis zum Rand



## Lexi (21. Mrz 2009)

Ich habe eine von JButton abgeleitete Klasse die _getPreferredSize()_, _getMaximumSize()_ und _getMinimumSize()_ überschreibt. Alle drei Methoden liefern _Dimension.height = 30_ und _Dimension.width = 30_ zurück.

In der konkreten Anwendung rufe ich _setText("#")_ auf. Leider werden mir, aufgrund der "geringen" Größe des Buttons nur "*...*" angezeigt. 
Definiert die Klasse JButton eine Methode, die bestimmt ab welcher Breite statt dem Label des Buttons "*...*" angezeigt werden ? Die müsste ich ja dann im meinem Fall überschreiben.


----------



## icarus2 (21. Mrz 2009)

Wie es scheint ist der Text einfach zu lang für einen Button. Poste doch mal ein bisschen Code.

Grundsätzlich würde ich empfehlen den Buttons keine statische Grösse zuzuordnen sondern die Grösse mit dem Layout bestimmen zu lassen.


----------



## Marco13 (21. Mrz 2009)

Das "..." zu vermeiden wäre wohl etwas aufwändiger. Aber in diesem Fall reicht es vermutlich schon, den Rand des Buttons kleiner zu machen bzw. auf 0 zu setzen:
button.setMargin(new Insets(0,0,0,0));
In einen 30x30-Button müßte das '#' dann ohne '...' reinpassen...


----------



## Lexi (21. Mrz 2009)

@Marco Hat funktioniert, danke dir.

@icarus Ja, das wäre warscheinlich besser. Blöderweise habe ich jetzt schon mein Programm auf diese statischen Größen ausgerichtet, das zu ändern ist mir jetzt ein wenig zu aufwendig. Werde mich beim nächsten mal nach dem Layout richten.


----------



## Ebenius (23. Mrz 2009)

Marco13 hat gesagt.:


> Das "..." zu vermeiden wäre wohl etwas aufwändiger. Aber in diesem Fall reicht es vermutlich schon, den Rand des Buttons kleiner zu machen bzw. auf 0 zu setzen:
> button.setMargin(new Insets(0,0,0,0));
> In einen 30x30-Button müßte das '#' dann ohne '...' reinpassen...


Vorsicht: Das wird mit anderen UI's möglicher Weise so nicht funktionieren. Mit Nimbus wird das beispielsweise Murx. 

Ebenius


----------



## Marco13 (23. Mrz 2009)

Nimbus ist eh eine andere Welt .. 
Was würde denn da passieren, bzw. wie würde man es da (oder allgemein UI-unabhängig) machen?


----------



## Ebenius (23. Mrz 2009)

Geht nicht wirklich. Einfach keine PreferredSize setzen und dem UI immer Spielraum lassen, den Platz so zu verwenden, wie es denkt, dass es gut sei.  Und natürlich immer: mit einer Reihe von L&Fs testen, das erhöht die Wahrscheinlichkeit, dass es mit anderen auch funktioniert.

Ebenius


----------



## Marco13 (23. Mrz 2009)

Aber... es muß doch auch unter Nimbus grundsätzlich möglich sein, zu sagen, dass ein Button keinen Rand haben soll? ???:L


----------



## Ebenius (23. Mrz 2009)

Es geht nicht um den Rand (alias Border). Es geht um den Abstand zwischen Rand und Inhalt (alias Margin). Beim Nimbus ist es so gelöst, dass der gesamte ButtonBorder den Abstand zum Inhalt macht und der Abstand zwischen Rand und Inhalt ist null (zero).

*[SIZE="+1"]Margin Test in Metal-L&F[/SIZE]*


*[SIZE="+1"]Margin Test in Nimbus-L&F[/SIZE]*


Ebenius


----------



## Marco13 (23. Mrz 2009)

Ich meinte mit "Rand" auch den margin - worum es ja hier ging. Nur irgendwie klingt das jetzt so, als wäre der Magin bei Nimbus... überflüssig ... also, würde nicht mehr berücksichtigt.... Hm... muss ich wohl bei Gelegenheit mal ein bißchen austesten...


----------



## Ebenius (23. Mrz 2009)

Der innere Abstand ist auch bei Nimbus nicht überflüssig. Du kannst ihn weiterhin benutzen. Aber er hat schon initial eine Nullbreite. Natürlich kannst Du den inneren Abstand noch vergrößern. Du kannst ihn sogar negativ machen und den gewünschten Effekt erzielen. Fakt ist aber, das ein Nullsetzen nicht hilft, um den Button kleiner werden zu lassen, als er ohnehin ist.

Ebenius


----------



## Marco13 (23. Mrz 2009)

Mir ist nicht klar, wie das gerechtfertigt ist. Man hat einen Text, der 10 Pixel hoch ist, und eine Border, die oben und unten je 2 Pixel hoch ist, und trotzdem ist der Button 30 Pixel hoch und über und unter dem Text 8 Pixel einfach so "da" (die früher der Margin waren, aber jetzt... einfach so "da"...)


----------



## Ebenius (23. Mrz 2009)

Ich weiß nicht, warum es so ist, aber es scheint bei SynthLFs üblich. Hat mich auch schon geärgert; sonst würde ich es gar nicht wissen. Die einzige mir bekannte, halbwegs verlässlichle Methode einen kleinen Button hinzubekommen, ohne mich auf ein L&F festzulegen, ist der, eine JToolBar zu nutzen, denn dort bekommen die Buttons vom jeweiligen ToolBarUI andere Borders/Layouts/Insets/Margins/wasauchimmer.

Ebenius


----------

