Re: Labeled button row using BorderLayout
On 9/30/2010 12:41 PM, Fred wrote:
How can I get the buttons to remain centered vertically?
I am placing a JPanel in the center, with flow layout. Then I add the
buttons to that center panel:
JPanel centerPanel = new JPanel();
centerPanel.setAlignmentY( Component.CENTER_ALIGNMENT );
You can use a Box layout to do this, and insert stretchy "glue" bits
before and after the component to get a centered effect.
In the example below, I make two Boxes. One is a vertical layout, and
holds the stretchy glue bits. It has just one component, which is the
entire row of buttons.
Then the row of buttons itself is just a box with a horizontal
configuration (and no glue).
For more one Box and glue, see the Swing tutorial:
<http://download.oracle.com/javase/tutorial/uiswing/layout/box.html>
package test;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class BorderLayoutTest {
public static void main( String[] args )
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
createAndShowGui();
}
} );
}
private static void createAndShowGui()
{
JFrame frame = new JFrame();
Box centerPanel = Box.createVerticalBox();
Box buttonRow = Box.createHorizontalBox();
buttonRow.add( new JButton( "Button 1" ) );
buttonRow.add( new JButton( "Button 2" ) );
buttonRow.add( new JButton( "Button 3" ) );
buttonRow.add( new JButton( "Button 4" ) );
centerPanel.add( Box.createVerticalGlue() );
centerPanel.add( buttonRow );
centerPanel.add( Box.createVerticalGlue() );
frame.add( centerPanel );
frame.add( new JLabel( "West" ), BorderLayout.WEST );
frame.pack();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}