Setenabled works but not on panel initialization

I have a panel with several components.
I have 2 radio buttons that control some logic, and depending on which radio button is selected, different components are enabled
I have a listener that fires for the radio buttons, and the application seems to work correctly at run time,
so that the right conmponents do get enabled and disabled when the buttons are manually clicked.
My problem though is that I need to set which one is enabled by default upon initialization,
but calling setEnabled(false) does not seem to have any effect in my initialization code,
but it does work when called from the listeners when each radio button is clicked.
I dont have a easy example to post as the class is pretty big...
I'm just checking if there is anything obvious to look for?
Edited by: dingfelder on Apr 1, 2008 11:38 AM

For instance, this is an SSCCE of sorts that does nothing but enables and disables JPanels on pressing a JRadioButton. It defaults to the middle button being selected:
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
class FuSwing1 extends JPanel
    private static final int BTN_COUNT = 3;
    private JRadioButton[] rBtns = new JRadioButton[BTN_COUNT];
    private JPanel[] btnPnls = new JPanel[BTN_COUNT];
    FuSwing1()
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        ButtonGroup btnGrp = new ButtonGroup();
        for (int i = 0; i < rBtns.length; i++)
            rBtns[i] = new JRadioButton("Radio Button " + (i + 1));
            btnGrp.add(rBtns);
JPanel panel = new JPanel();
panel.add(rBtns[i]);
btnPnls[i] = createBtnPanel();
if (i == BTN_COUNT / 2) // select middle button on startup
btnPnls[i].setEnabled(true);
rBtns[i].setSelected(true);
else
btnPnls[i].setEnabled(false);
btnPnls[i].setBorder(BorderFactory.createTitledBorder("Button Panel " + (i + 1)));
panel.add(btnPnls[i]);
final int index = i;
rBtns[i].addChangeListener(new ChangeListener()
public void stateChanged(ChangeEvent e)
JRadioButton rBtn = (JRadioButton)e.getSource();
if (rBtn.isSelected())
btnPnls[index].setEnabled(true);
else
btnPnls[index].setEnabled(false);
add(panel);
private JPanel createBtnPanel()
JPanel bp = new JPanel()
@Override // since panels don't disable children by default
public void setEnabled(boolean enabled)
Component[] components = getComponents();
for (Component component : components)
component.setEnabled(enabled);
super.setEnabled(enabled);
bp.setLayout(new GridLayout(0, 2, 20, 20));
for (int i = 0; i < 4; i++)
JButton btn = new JButton("Button " + i);
bp.add(btn);
return bp;
private static void createAndShowGUI()
JFrame frame = new JFrame("FuSwing1 Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new FuSwing1());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
public static void main(String[] args)
javax.swing.SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGUI();

Similar Messages

Maybe you are looking for