W.K.S
W.K.S

Reputation: 10095

Why does my JApplet initially appear white?

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

enter image description here

enter image description here

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);       
    }

}

Upvotes: 3

Views: 100

Answers (1)

Andrew Thompson
Andrew Thompson

Reputation: 168825

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.

Upvotes: 3

Related Questions