problem in the alignment of components using BoxLayout

why the panel holding JCombox taking consuming all the unused space.

need assist in fixing this issue, my req is jcombobox should grow horizontaly not verticaly when window resizes.

/*

* BoxLayoutTest.java

*

*/

package dump;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.BorderFactory;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

publicclass BoxLayoutTestextends JPanel{

private JPanel stacksPanel;

private JScrollPane stacksHolder;

privateint panelCounter = 1;

/** Creates a new instance of BoxLayoutTest */

public BoxLayoutTest(){

initComp();

}

privatevoid initComp(){

setOpaque(false);

setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));

add(getControlPanel());

add(Box.createVerticalStrut(5));

add(getSelectPanel());

add(Box.createVerticalStrut(5));

stacksPanel =new JPanel();

stacksPanel.setLayout(new BoxLayout(stacksPanel,BoxLayout.Y_AXIS));

stacksPanel.add(getStackPanel());

stacksHolder =new JScrollPane(stacksPanel);

add(stacksHolder);

add(Box.createVerticalStrut(5));

}

private JPanel getStackPanel(){

JPanel stackPanel =new JPanel();

stackPanel.setBorder(BorderFactory.createLineBorder(Color.RED));

stackPanel.setLayout(new BoxLayout(stackPanel,BoxLayout.Y_AXIS));

JLabel titleLBL =new JLabel("PANEL# " + panelCounter);

titleLBL.setHorizontalAlignment(JLabel.CENTER);

stackPanel.add(titleLBL);

for(int i=0; i < 8;i++){

JLabel lbl =new JLabel("LABEL# " + i);

lbl.setHorizontalAlignment(JLabel.LEADING);

stackPanel.add(lbl);

}

panelCounter++;

return stackPanel;

}

private JPanel getSelectPanel(){

JPanel selectPanel =new JPanel();

selectPanel.setBorder(BorderFactory.createLineBorder(Color.GREEN));

//selectPanel.setLayout(new BoxLayout(selectPanel,BoxLayout.X_AXIS));

String[] items ={"ITEM#1","ITEM#2","ITEM#3","ITEM#4","ITEM#5"};

JComboBox cb =new JComboBox(items);

selectPanel.add(cb);

return selectPanel;

}

private JPanel getControlPanel(){

JPanel controlPanel =new JPanel();

controlPanel.setLayout(new BoxLayout(controlPanel,BoxLayout.X_AXIS));

controlPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE));

JButton addButton =new JButton("ADD ");

addButton.setMaximumSize(addButton.getPreferredSize());

addButton.setAlignmentX(0.0f);

controlPanel.add(addButton);

controlPanel.add(Box.createHorizontalGlue());

addButton.addActionListener(new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

stacksPanel.add(Box.createVerticalStrut(10));

stacksPanel.add(getStackPanel());

stacksHolder.revalidate();

}

});

return controlPanel;

}

publicstaticvoid main(String args[]){

JFrame testFrame =new JFrame("BoxLay test");

testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

testFrame.setContentPane(new BoxLayoutTest());

testFrame.setPreferredSize(new Dimension(260,650));

testFrame.pack();

testFrame.setVisible(true);

}

}

[6350 byte] By [Ramxya] at [2007-10-3 3:46:45]
# 1
Read the Swing tutorial on [url http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html]How to Use Box Layout[/url]. It has plenty of example that explain how the alignment and sizing work.
camickra at 2007-7-14 21:43:33 > top of Java-index,Desktop,Core GUI APIs...