Search code examples
javajapplet

How do i make this jApplet working?


How do i make this code to run as an jApplet ?

My Applet looks like this now:

public class TickTackToeApplet extends JApplet implements ActionListener {
    private static final long serialVersionUID = 1L;
    private ArrayList<JButton> buttons = new ArrayList<JButton>();

    private JPanel panel = new JPanel();
    private Game game = new Game();
    private Player player1;
    private Player player2;
    private int numberOfPlacedOutChars = 0;
    private String winner = "None";

    public void init() {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    game = new Game();
                    game.setSize(4);

                    try {
                        PlayerManager pm = new PlayerManager();
                        player1 = pm.getPlayer("Henrik", "temp123");
                        player2 = pm.getPlayer("test", "test");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    createGUI(game.getSize());
                }
            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void CreateButtons(int gameBoardSize)
    {
        for(int x=0; x<gameBoardSize; x++)
        {
            for(int y=0; y<gameBoardSize; y++)
            {
                JButton btn = new JButton("");
                btn.setFont(new Font("Tahoma", Font.PLAIN, 32));
                btn.setName(x + ";" + y);
                btn.addActionListener(this);
                buttons.add(btn);
            }
        }
    }

    public void PlaceOutButtons()
    {
        for(JButton btn : buttons)
            panel.add(btn);
    }

    public void createGUI(int gameBoardSize) {

        panel.setSize(gameBoardSize*25, gameBoardSize*25);
        panel.setBackground(Color.BLACK);
        getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(new GridLayout(gameBoardSize, gameBoardSize));

        CreateButtons(gameBoardSize);
        PlaceOutButtons();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton buttonClicked = (JButton)e.getSource();
        String coordinates = buttonClicked.getName();
        String[] strArr = coordinates.split(";");
        int x = Integer.parseInt(strArr[0]);
        int y = Integer.parseInt(strArr[1]);

        if (this.numberOfPlacedOutChars % 2 == 0) {
            this.player1.setGameChar('X');
            this.game.placeChar('X', x, y);
            buttonClicked.setText("X");
            buttonClicked.setEnabled(false);
        }
        else {
            this.player2.setGameChar('O');
            this.game.placeChar('O', x, y);
            buttonClicked.setText("O");
            buttonClicked.setEnabled(false);
        }

        numberOfPlacedOutChars++;

        if(this.game.checkWin() == true) {

            updatePlayersInfo(); 

            for(JButton btn : buttons) {
                btn.setEnabled(false);
            }

            int choice = JOptionPane.showConfirmDialog(this, "Winner is: " + this.winner + 
                    ", play again?", "WINNER", JOptionPane.YES_NO_OPTION);

            if(choice == 0) {
                clearGameBoard();
                return;
            }
            //stop the applet
            stop();
        }

        if(this.game.IsDonePlaying() && this.game.checkWin() == false) {

            int choice = JOptionPane.showConfirmDialog(this, "Winner is: " + this.winner + 
                    ", play again?", "WINNER", JOptionPane.YES_NO_OPTION);

            if(choice == 0) {
                clearGameBoard();
                return;
            }
            //stop the applet
            stop();
        }
    }

    public void startGame(int gameSize, Player player1, Player player2) {
        this.game.setSize(gameSize);
        this.player1 = player1;
        this.player2 = player2;
    }

    private void updatePlayersInfo() {
        if(this.game.getWinningChar() == this.player1.getGameChar()) {
            this.player1.incrementWins();
            this.player2.incrementLosses();
            this.winner = this.player1.getUserName();
        }

        if(this.game.getWinningChar() == this.player2.getGameChar()) {
            this.player2.incrementWins();
            this.player1.incrementLosses();
            this.winner = this.player2.getUserName();
        }

        try {
            PlayerManager playerManager = new PlayerManager();
            playerManager.savePlayer(this.player1);
            playerManager.savePlayer(this.player2);
        } catch (IllegalArgumentException | IOException | InterruptedException e1) {
            JOptionPane.showMessageDialog(this, "Couldn't update player info!");
        }
    }

    private void clearGameBoard() {
        for(JButton btn : this.buttons) {
            btn.setEnabled(true);
            btn.setText("");
            this.winner = "None";
            this.game.setWinningChar('\0');
        }
    }

}

But my applet isnt showing in the browser.

Can i use this applet tag in the html file?

<applet codebase="bin" code="gui/TickTackToeApplet.class" width=500 height=500>
<p>Testing my applet...</p>
</applet>

Or what should i write in the applet tag?


Solution

  • Your code is too long to investigate it deeply.

    I cannot make sure that it would work or even compile, but I am going to provide some basic guidelines.

    1 Use incremental programming, program something, make sure it works, add some more functionality.

    2 Don't call methods with capital letters, change it to placeOutButtons

    public void PlaceOutButtons()
    

    3 Use SwingUtilities.invokeLater when you create your GUI

     SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
    

    http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

    4 init() is a entry point for your applet, the method browser would call. Since it is empty nothing happens.

    http://docs.oracle.com/javase/tutorial/deployment/applet/appletMethods.html

    5 You never call constructor on class TickTackToeApplet. Try doing it inside init

    6 If you use Eclipse you can start applet using its inbuilt Applet Viewer.