Höhe eines Buttons festlegen

Status
Nicht offen für weitere Antworten.

Bartleby

Aktives Mitglied
Hallo,

ich bin gerade dabei zu verzweifeln :bahnhof: Eigentlich habe ich nur ein ganz kleines Anliegen, aber wahrscheinlich sehe ich gerade den Wald vor lauter Bäumen nicht. Ich möchte die Höhe eines JButtons festlegen, die Breite soll aber dynamisch angepasst werden.
Wenn ich button.setPreferredSize(new Dimension(5,15)) verwende, wird der Button auch 5x15cm gezeichnet. Die Breite kenne ich aber nicht, also nehme ich button.setPreferredSize(new Dimension(0,15)) - jetzt wird aber eine Breite von 0px statt der benötigten Breite verwendet, wie ich es gehofft hatte. Die benötigte Breite kann ich auch nicht erfragen, da ein button.getWidth() beim ersten Mal 0px liefert, da der Button ja noch nie gezeichnet wurde.
Verwende ich hingegen button.setSize(new Dimension(0,15)), wird die Breite zwar dynamisch angepasst, aber die Höhe ist nicht 15, sondern 25px ???:L
Wie ihr seht, stehe ich gerade voll auf dem Schlauch. Wie bekomme ich den Button niedriger?

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestToolbar extends JPanel {
	public static void main(String[] args) throws Exception {

		final JFrame frame = new JFrame("TestToolbar");
		frame.setBounds(20, 20, 800, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final TestToolbar panel = new TestToolbar();

		frame.setContentPane(panel);
		frame.setVisible(true);
	}

	private TestToolbar() throws Exception {
		setLayout(new FlowLayout());
		setBackground(Color.yellow);
		
		JButton b = new JButton("text");
		b.setSize(new Dimension(0,15));
//		b.setPreferredSize(new Dimension(0,15));
//		b.setMinimumSize(new Dimension(0,15));
//		b.setMaximumSize(new Dimension(0,15));
		add(b);
	}
}
 

0001001

Bekanntes Mitglied
Hilft dir das weiter:
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Demo extends JFrame{
    public Demo(){
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	JButton b = new JButton("text");
    	
    	b.setPreferredSize(new Dimension(500000,15));

        this.add(b, BorderLayout.NORTH);
        this.pack();
        this.setSize(800, 600);
        this.setVisible(true);
        System.out.println(b.getSize());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable()   {
                public void run() {
                    new Demo();
                }
        });
    }
}

Dadurch passt sich die Breite an die durch den LayoutManager zur Verfügung gestellte Breite an. Die Höhe ist auf 15px begrenzt.
 

Bartleby

Aktives Mitglied
Vielen Dank für den Tipp, allerdings ist es nicht ganz das, was ich suche.

Wenn ich keine *size-Einstellungen mache, ist die Größe des Buttons vom LayoutManager bestimmt und z.B. 50x25. Nun möchte ich die Größe aber so beeinflussen, dass der Button nur 15px hoch ist, also 50x15. Ist der Text im Button nun länger, kann der Button auch 60x15 sein, oder wenn der Text kürzer ist, 40x15. Aber IMMER 15px hoch!

Verstehst du was ich meine? Die benötigte Breite kenne ich aber nicht, deshalb kann ich sie mit setPreferredSize(w,h) nicht setzen. Die einzige Möglichkeit die mir einfällt, ist es, die Breite manuell zu berechnen. Also Breite des Fonts + ggf. Iconbreite + ggf. Abstand zw. Icon u. Text + ggf. Insets + ggf. Breite des Rahmens... Das erscheint mir aber ziemlich umständlich. Gibt es da keine einfachere Möglichkeit?
 
G

Gast

Gast
Hallo

Hol dir doch die Grösse des Buttons per getPreferedSize().width, bevor du die Grösse änderst.

Beispiel:
button.setPreferedSize(
new Dimension(button.getPreferedSize().width, [hier deine Höhe]) )
 

Bartleby

Aktives Mitglied
Das funktioniert leider nicht, da die PreferredSize 0x0 so lang sie nicht gesetzt wurde und auch die Size beim aller ersten Mal 0x0 ist, so lang der Button nicht gezeichnet wurde. Somit müsste ich den Button zweimal zeichnen...

Ich habe das Problem jetzt aber so gelöst, indem ich eine eigene Button-Klasse erstelle, die nur die Methode getMaximumSize() überschreibt. Diese ruft super.getMaximumSize() auf und bekommt damit die richtige Breite. Zurück gebe ich diese Breite mit meiner festgelegten Höhe von 15. Zwar etwas umständlich, aber es funktioniert.
 

Marco13

Top Contributor
Ja, so ähnlich wäre jetzt auch mein Ansatz gewesen. Ich hätte aber keine "echte" eigene Klasse dafür erstellt, sondern das durch eine anonyme Klasse geregelt ... ganz grob in etwa so
Code:
class Application
{
    void init()
    {
        JButton button0 = createConstrainedHeightButton(15, "Hallo");
        JButton button1 = createConstrainedHeightButton(15, "Welt");
    }

    private JButton createConstrainedHeightButton(final int height, String text)
    {
        JButton result = new JButton(text)
        {
            public Dimension getPreferredSize()
            {
                 Dimension dim = super.getPeferredSize();
                 dim.height = height;
                 return dim;
            }
        };
        return result;
    }
}
... so in etwa... könnte funktionieren....
 

Bartleby

Aktives Mitglied
Jup, so gehts natürlich auch. Da ich den Button aber an verschiedenen Ecken benötige, ist eine "echte" Klasse dafür besser geeignet.

Dein Ansatz hat nur einen kleinen Fehler:
Code:
super.getPeferredSize()
liefert 0x0 zurück, so lang du nicht selbst die PrefSize gesetzt hast (was ja nicht geht)!
Deshalb ist die einzige Möglichkeit mit
Code:
super.getMaximumSize()
zu arbeiten.
 

Marco13

Top Contributor
Bartleby hat gesagt.:
Dein Ansatz hat nur einen kleinen Fehler:
Code:
super.getPeferredSize()
liefert 0x0 zurück, so lang du nicht selbst die PrefSize gesetzt hast (was ja nicht geht)!

Nö, getPreferredSize liefert die Preferred Size. Deswegen auch der Name :wink: Wenn man die preferred size nicht explizit gesetzt hat, wird sie aus dem Inhalt der Component (d.h. im Fall eines Buttons: Aus dem enthaltenen Text und Icon) berechnet. Wenn dort 0,0 geliefert wird, dann vmtl. weil der Button noch nicht "realized" ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit der Höhe eines Panels AWT, Swing, JavaFX & SWT 11
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
F Swing Höhe eines Headers einer JTable anpassen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Problem mit höhe||breite eines JFrames AWT, Swing, JavaFX & SWT 4
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
G Höhe eines JPanels ermittlen AWT, Swing, JavaFX & SWT 3
M Höhe von eines Strings in Pixeln (nicht Höhe einer Zeile) AWT, Swing, JavaFX & SWT 12
K Höhe und Breite eines Panels im GridBagLayout ermitteln AWT, Swing, JavaFX & SWT 9
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
B JFreeChart Gantt Höhe Tasks AWT, Swing, JavaFX & SWT 1
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
S SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row AWT, Swing, JavaFX & SWT 5
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
A LayoutManager Höhe von NORTH beim BorderLayout ändern AWT, Swing, JavaFX & SWT 4
M Wie ermittele ich die Breite und Höhe meines Displays in Pixel AWT, Swing, JavaFX & SWT 3
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N Swing Optimale Höhe eine JTextPanes bei festgelegter Breite bestimmen AWT, Swing, JavaFX & SWT 23
P Höhe der TitleBar vom JFrame AWT, Swing, JavaFX & SWT 2
Landei Swing JToolbar: Textfelder mit normaler Höhe? AWT, Swing, JavaFX & SWT 2
T jpanel höhe netbeans.... AWT, Swing, JavaFX & SWT 5
H LayoutManager Auf gleicher Höhe anordnen AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
D JPanel höhe setzen AWT, Swing, JavaFX & SWT 2
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
N Höhe einstellen JScrollPane AWT, Swing, JavaFX & SWT 3
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
S Für Breite und Höhe werden 0.0 angezeigt AWT, Swing, JavaFX & SWT 2
C Swing JTextArea mit fester Breite und angepasster Höhe??? AWT, Swing, JavaFX & SWT 8
G JList Höhe? AWT, Swing, JavaFX & SWT 2
P Breite und Höhe des contentPane abfragen AWT, Swing, JavaFX & SWT 3
Y Einzigartigkeit des GridBagLayout - individuelle Höhe/Breite AWT, Swing, JavaFX & SWT 4
S Tabelle soll sich auch in der Höhe resizen? AWT, Swing, JavaFX & SWT 4
T Breite des Containers ist gegeben - wie die Höhe berechnen? AWT, Swing, JavaFX & SWT 3
H JTabbedPane Höhe-Problem AWT, Swing, JavaFX & SWT 3
S [BorderLayout]WEST/EAST sollen über ganze Höhe gehen; AWT, Swing, JavaFX & SWT 3
G Linie nach Höhe einer Zahl zeichnen? AWT, Swing, JavaFX & SWT 3
A JTextFiled-Breite und Höhe ändern AWT, Swing, JavaFX & SWT 3
S Feste Breite und Höhe für einen formatierten Text. AWT, Swing, JavaFX & SWT 5
S JFrame Fenster höhe der Titelzeile? AWT, Swing, JavaFX & SWT 13
G Klasse Image - Höhe und Breite ermitteln AWT, Swing, JavaFX & SWT 12
B BorderLayout.WEST (JTree strecken in Höhe) AWT, Swing, JavaFX & SWT 2
D Jtable Header Höhe setzen ? AWT, Swing, JavaFX & SWT 2
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
javasdann Höhe von Titlebar in jInternalFrame ändern AWT, Swing, JavaFX & SWT 5
J DefaultTableCellRenderer & Höhe AWT, Swing, JavaFX & SWT 3
D JLabel mit fester Breite und beliebiger Höhe AWT, Swing, JavaFX & SWT 4
O warum ist die Höhe meines JPanels 0? AWT, Swing, JavaFX & SWT 8
L wie kann man die Höhe und Breite von JList festlegen AWT, Swing, JavaFX & SWT 3
C Titel-Balken höhe?! AWT, Swing, JavaFX & SWT 4
C Höhe der Titelleiste in JInternalFrame AWT, Swing, JavaFX & SWT 4
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben