3

I've made a JApplet application which consists of nine buttons.

  • When the applet is first launched, it is completely white. If you click on the areas where the buttons are, the button will become visible and will function.

enter image description here

  • 30 seconds after the applet is launched, the buttons become visible, but the background is still white.

enter image description here

  • The main menu should look like this.

enter image description here

Why does the applet not load properly? The code for the applet is as follows:

ConverterApplet.java:

public class ConverterApplet extends JApplet {

    public void init()
    {
        try{
            SwingUtilities.invokeAndWait(new Runnable(){

                @Override
                public void run() 
                {
                    createGUI();

                }

            });
        }catch(Exception e)
        {
            System.err.println("GUI could not be created.");
        }
    }

    public void start(){}
    public void stop(){}

    public void destroy(){}

    public void paint(java.awt.Graphics g){
        resize(400,400);   
    };

    private void createGUI()
    {
        MainPanel m = new MainPanel();
        getContentPane().add(m,BorderLayout.CENTER); 
    }

}

MainPanel.java:

public class MainPanel extends JPanel implements ActionListener {

    private final static String UNIT_SELECTION_PANEL = "UNIT_SELECTION_CARD";
    private final static String UNIT_CONVERSION_PANEL = "UNIT_CONVERSION_PANEL";    

    JPanel cardPanel;
    private JButton[] UnitButtons;
    private JButton backButton; 
    private CardLayout cardLayout;
    private UnitConversionPanel unitConversionPanel;

    public MainPanel()
    {
        super(new GridBagLayout());

        cardPanel = new JPanel();
        JPanel unitSelectionPanel = new JPanel();

        backButton = new JButton("<-");
        backButton.addActionListener(this);
        backButton.setVisible(false);

        UnitButtons = new JButton[9];
        UnitButtons[0] = new JButton("Length");
        UnitButtons[1] = new JButton("Time");
        UnitButtons[2] = new JButton("Mass");
        UnitButtons[3] = new JButton("Speed");
        UnitButtons[4] = new JButton("Volume");
        UnitButtons[5] = new JButton("Area");
        UnitButtons[6] = new JButton("Pressure");       
        UnitButtons[7] = new JButton("Temperature");
        UnitButtons[8] = new JButton("Energy");

        for(int i=0;i<UnitButtons.length;i++)
        {
            UnitButtons[i].addActionListener(this);
        }

        GridLayout layout = new GridLayout(0,3,20,20);
        unitSelectionPanel.setLayout(layout);

        for(JButton buttons: UnitButtons)
        {
            unitSelectionPanel.add(buttons);
        }

        unitConversionPanel = new UnitConversionPanel();

        cardLayout = new CardLayout();
        cardPanel.setLayout(cardLayout);
        cardPanel.add(UNIT_SELECTION_PANEL, unitSelectionPanel);
        cardPanel.add(UNIT_CONVERSION_PANEL, unitConversionPanel);
        cardLayout.show(cardPanel, UNIT_SELECTION_PANEL);

        GridBagConstraints c = new GridBagConstraints();
        //c.fill = GridBagConstraints.VERTICAL;
        c.gridx = 0;
        c.gridy = 0;
        //c.insets = new Insets(5,5,5,5);
        add(backButton,c); 

        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1;
        c.weighty = 1;
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth=2;
        c.gridheight=1;
        add(cardPanel,c);       
    }

}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
W.K.S
  • 9,787
  • 15
  • 75
  • 122
  • Sorry, picked up a bad habit. I tried to change the size of the main panel but that didn't work. Is there another way? – W.K.S Sep 01 '12 at 15:29
  • Removing the method solved the problem, but the applet window is too small. I was kinda hoping to make this applet into an executable jar. Should I be using a JFrame instead? I'm sorry if that's a dumb question. – W.K.S Sep 01 '12 at 15:35

1 Answers1

3
public void paint(java.awt.Graphics g){ 
    resize(400,400); 
}; 

Don't call methods that change the GUI in paint, doing so would typically trigger a repaint, which in turn would call paint, which in turn would set a size, which in turn..

Also, don't try to resize an applet from within Java code (ever). An applet size should be set in the HTML. Remove that entire method. Be sure to call validate() after the components are added.

..hoping to make this .. executable jar. Should I be using a JFrame instead?

Yes, definitely.

Then launch the JFrame from a link using Java Web Start. Creating a 'double click - launch' app. provides an OK experience for the end user, but JWS makes it all very slick and professional.

Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433