JButton will seine Hoehe nicht aendern

timgkeller

Grünschnabel
Hi Leute,

eigentlich eine ganz simple Frage, aber ich bekomme es einfach nicht hin! Ich habe folgenden Code um eine kleine Status Bar zu erzeugen:

Java:
public class StatusBar extends javax.swing.JPanel {

	JLabel okStatus = new JLabel();
	JButton button = new JButton();
	
	public StatusBar() {
		JPanel west = new JPanel();
		west.setLayout(new BorderLayout());

		setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
		setLayout(new BorderLayout());
		
		okStatus.setIcon(new ImageIcon("files/ok.gif"));
		button.setEnabled(false);
		
		west.add(okStatus, BorderLayout.LINE_START);
		west.add(button, BorderLayout.LINE_END);
				
		add(west, BorderLayout.WEST);
	}
	
	public void setMessage(String message){
		okStatus.setText(message);
	}
	
	public void activateButton(String text){
		button.setText(text);
		button.setEnabled(true);
		
	}
	
	public JButton getButton(){
		return button;
	}
}

Jetzt moechte ich, dass der Button genau so hoch ist, wie der Text. Ueber okStatus.getHeight() bekomme ich die hoehe des Textes, jedoch nimmt der Button diese Hoehe nicht an, egal wie ich es mache.
Jetzt habe ich zwar gefunden, dass es einige Layout Manager gibt, die die Eigenschaften bezueglich Hoehe ignorieren, aber das BorderLayout, das ich extra deswegen gewaehlt habe, soll eigentlich nicht dazugehoeren.

Kann mir vielleicht irgendjemand helfen?

Vielen Dank, Tim
 
Hey,

danke fuer eure Antworten! Leider hat
Java:
button.setMargin(new Insets(0,0,0,0));
und
Java:
button.setPreferredSize(new Dimension(100,24));
keinerlei Effekt, auch nicht in Kombination... :(

Gruss Tim
 
Mach ein GridLayout ich glaub ich hatte mal das selbe Problem.

Das ändert wird wohl kein Problem darstellen
 
Hey,

also ich habe jetzte ein GridLayout, aber der Button aendert seine Hoehe weder auf setPreferredSize(), noch auf setMinimumSize() und setMaximumSize(), noch auf setSize().

In jedem Fall versuche ich ihm eine new Dimension(120,24) zuzuteilen.

Ihn groesser zu machen, als er eh schon ist, geht uebrigens mit setPreferredSize() ohne Probleme :confused:

Gruss Tim
 
So,

also ich habe jetzt noch einmal alle in Frage kommenden Funktionen durchgetestet.

setMinimumSize(new Dimension(x,y)) - Kein Effekt, weder bei Vergroesserung noch Verkleinerung.
setMaximumSize(new Dimension(x,y)) - Kein Effekt, weder bei Vergroesserung noch Verkleinerung.
setSize(new Dimension(x,y)) - Kein Effekt, weder bei Vergroesserung noch Verkleinerung.
setPreferredSize(new Dimension(x,y)) - Hiermit kann ich den Button zwar vergroessern, jedoch die Hoehe von 24 Pixeln nimmt er nicht an...

Da draengt sich mir die Frage auf, ob es bei bestimmten Layout Managern evtl. eine minimale Groesse fuer Buttons gibt, oder uebersehe ich irgendetwas anderes?!

Gruss Tim
 
Also ich nun deinen Code mal auf GridBagLayout umgestellt und bei mir klappt das wunderbar:

Code:
public class StatusBar extends javax.swing.JPanel {
	
    JLabel okStatus = new JLabel();
    JButton button = new JButton();
    
    public StatusBar() {
    	initialize();
    }

    private void initialize() {      			
      GridBagConstraints gridBagConstraints = new GridBagConstraints();
      gridBagConstraints.gridx = 0;
      gridBagConstraints.gridy = 0;
      GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
      gridBagConstraints2.gridx = 0;
      gridBagConstraints2.gridy = 0;
      GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
      gridBagConstraints1.gridwidth = 1;
      gridBagConstraints1.gridy = 0;
      gridBagConstraints1.gridx = 1;
      JPanel west = new JPanel();
      west.setLayout(new GridBagLayout());
      setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
      setLayout(new GridBagLayout());
      this.setSize(new Dimension(674, 325));
      okStatus.setIcon(new ImageIcon("files/ok.gif"));
      okStatus.setText("Status");
      button.setEnabled(false);
      west.add(okStatus, gridBagConstraints1);
      west.add(button, gridBagConstraints2);
      this.add(west, gridBagConstraints);
    }
    
    public void setMessage(String message){
        okStatus.setText(message);
    }
    
    public void activateButton(String text){
        button.setText(text);
        button.setEnabled(true);
    }
    
    public JButton getButton(){
        return button;
    }
}

Oder ist das nicht das was du wolltest?
 
Hey xanadoo,

danke fuer deinen Code. Ich habe das eben auch mal ausprobiert, aber leider aendert das nicht wirklich was an der Hoehe meines Buttons.

Ich habe mal einen Screenshot angehaengt, damit ihr seht, was ich meine. Im Panel in der Status Leiste ist ein Button, der mir etwas zu hoch ist und den ich einfach nicht kleiner bekomme :(

Vielen Dank auf jeden Fall fuer eure Hilfe,
Gruss Tim
 

Anhänge

  • screenshot.JPG
    screenshot.JPG
    28,7 KB · Aufrufe: 98
Also, wenn ich in dem Quelltext den du oben gepostet hast,
Code:
button.setMargin(new Insets(0,0,0,0));
setze, wird bei mir der Button kleiner.

Code:
import java.awt.BorderLayout;
import java.awt.Insets;

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

public class StatusBar
    extends javax.swing.JPanel
{
  JLabel  okStatus = new JLabel();
  JButton button   = new JButton();

  public StatusBar()
  {
    JPanel west = new JPanel();
    west.setLayout(new BorderLayout());
    setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
    setLayout(new BorderLayout());
//    okStatus.setIcon(new ImageIcon("files/ok.gif"));
    button.setEnabled(false);
    button.setMargin(new Insets(0,0,0,0));
    west.add(okStatus, BorderLayout.LINE_START);
    west.add(button, BorderLayout.LINE_END);
    add(west, BorderLayout.WEST);
  }

  public void setMessage(String message)
  {
    okStatus.setText(message);
  }

  public void activateButton(String text)
  {
    button.setText(text);
    button.setEnabled(true);
  }

  public JButton getButton()
  {
    return button;
  }
  
  public static void main(String[] args)
  {
    JFrame frame = new JFrame();
    
    StatusBar bar = new StatusBar();
    bar.activateButton("Display");
    bar.setMessage("\"18.08.txt\" successfully loaded!");
    frame.add(bar, BorderLayout.SOUTH);
    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    frame.setVisible(true);
    frame.pack();
  }
}

MFG

Sascha
 

Anhänge

  • test.jpg
    test.jpg
    10,3 KB · Aufrufe: 63
Zurück