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.

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

- The main menu should look like this.

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);
}
}
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.Yes, definitely.
Then launch the
JFramefrom 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.