public GraphicalUI(IBlackJackController controller) {
        this.controller = controller;
        this.cardField = new GraphicalUICardField();
        this.playerInfo = new GraphicalUIPlayerInfo();
        this.options = new GraphicalUIOption(controller);

        // observable
        controller.addObserver(this);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
        mainPanel.add(playerInfo, BorderLayout.WEST);
        mainPanel.add(cardField, BorderLayout.CENTER);
        mainPanel.add(options, BorderLayout.SOUTH);

        // Menu
        this.setJMenuBar(new GraphicalUIMenu(controller));

        // Sonstige Eigenschaften
        this.setSize(WITDH, HEIGHT);
        this.setContentPane(mainPanel);

        // color the stuff
        for (Component component : this.getContentPane().getComponents()) {
            component.setBackground(GraphicalUI.BACKGROUNDCOLOR);
        }

        this.setTitle("BlackJack");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(true);
        this.setVisible(true);

        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent event) {

                if (JOptionPane.showConfirmDialog(null,
                        "Wollen sie diese Anwendung wirklich beenden?",
                        "Beenden", JOptionPane.YES_NO_OPTION) == 0) {
                    System.exit(0);
                }
            }
        });

        // Neues Spiel mit benutzerdefinierten Credit starten
        new GraphicalUIMenuNewGame(controller);
    }