private void createGUIComponents(int players) {
        table = new Table();

        hand = new CardViewer(new InSearcherMouseAdapter(Zone.HAND));

        playersInfo = new PlayerInfo[players];
        for (int i = 0; i < playersInfo.length; i++) {
            playersInfo[i] = new PlayerInfo(i, "...waiting...");
        }

        playerLibrary = new CurrentPlayerLibrary();

        logger = new Logger(table);
        
        exit = new JButton("Leave game");
        exit.setFocusable(false);
        exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (JOptionPane.showConfirmDialog(Game.this,
                        "Are you sure that you want\nto leave the game?",
                        Main.TITLE_SHORT, JOptionPane.YES_NO_OPTION,
                        JOptionPane.WARNING_MESSAGE)
                        == JOptionPane.YES_OPTION) {
                    client.closeClient();
                    Game.this.dispose();
                }
            }
        });
        
        restart = new JButton("Restart");
        restart.setFocusable(false);
        restart.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (JOptionPane.showConfirmDialog(Game.this,
                        "Are you sure that you want to shuffle all your cards\n"
                        + "into your library and draw seven cards?\n"
                        + "This will also destroy all your tokens and reset "
                        + "your health.",
                        Main.TITLE_MED, JOptionPane.YES_NO_OPTION,
                        JOptionPane.PLAIN_MESSAGE)
                        == JOptionPane.YES_OPTION) {
                    client.send(new Restart());
                }
            }
        });
        
        coin = new JButton("Toss a coin");
        coin.setFocusable(false);
        coin.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                client.send(new RandomValue(RandomValue.COIN));
            }
        });
        
        die = new JButton("Roll a die");
        die.setFocusable(false);
        die.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                client.send(new RandomValue(RandomValue.DIE));
            }
        });
        
        chat = new JTextField();
        chat.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (chat.getText() != null && !chat.getText().equals("")) {
                    client.send(new Message(chat.getText()));
                    chat.setText("");
                }
            }
        });
        
        token = new JButton("Create token");
        token.setFocusable(false);
        token.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CreateToken ct = TokenCreator.show(Game.this);
                if (ct != null) {
                    client.send(ct);
                }
            }
        });
        
        rand = new JButton("<html>Choose random card<br>from your hand</html>");
        rand.setFocusable(false);
        rand.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                client.send(new RandomCard());
            }
        });
        
        untapAll = new JButton("Untap all");
        untapAll.setFocusable(false);
        untapAll.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                client.send(new UntapAll());
            }
        });
    }