public BoardUI(Board board, PluginInterface[] plugins) {

		this.board = board;
		this.board.addObserver(this);

		lists_zone = new JPanel();
		lists_zone.setLayout(new BoxLayout(lists_zone, BoxLayout.X_AXIS));
		lists_zone.setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));
        lists_zone.setBackground(new Color(100,150,200));

		// HACK: Pour defocuser les textinput si on clique ailleurs,
		// on vole le focus si on clique sur le panel principal
		lists_zone.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				super.mouseReleased(e);
				lists_zone.grabFocus();
			}
		});

		label_menu_listener = new MouseAdapter()
		{
			@Override
			public void mouseReleased(MouseEvent e)
			{
				super.mouseReleased(e);    //To change body of overridden methods use File | Settings | File Templates.

				// On vérifie que c'était un clic sensé ouvrir un menu
                if (e.isPopupTrigger())
                {
					String class_src = e.getSource().getClass().getName();
					if (class_src.equals("GUI.ItemUI") || class_src.equals("javax.swing.JTextArea"))
					{
						if (class_src.equals("GUI.ItemUI"))
							item_menu.setClickedItem((ItemUI) e.getSource());
						if (class_src.equals("javax.swing.JTextArea"))
							item_menu.setClickedItem((ItemUI) (e.getComponent().getParent()));

						item_menu.show(e.getComponent(), e.getX(), e.getY());
					}
				}
			}
		};

		item_menu = new ItemMenu();

		for (Core.List list : board.getLists())
		{
//			list.addObserver(this);
			//setup_list(list);
            lists_zone.add(new ListUI(list, label_menu_listener));
            lists_zone.add(Box.createRigidArea(new Dimension(10, 0)));
        }

		create_empty_list();

		JScrollPane horizontal_scroll = new JScrollPane(lists_zone);
		horizontal_scroll.getHorizontalScrollBar().setUnitIncrement(14);

		frame = new JFrame(board.getName() + " - Dashlist");
		frame.add(horizontal_scroll, BorderLayout.CENTER);

		for (PluginInterface plugin : plugins)
		{
			String[] target = plugin.getTargetContainer().split("[:]");

			// On teste si le plugin veut s'attacher à un container de cette classe
			if (target[0].equals(this.getClass().getName()))
			{
				try {
					plugin.acquireContainer(((Container) (getClass().getDeclaredField(target[1]).get(this))));
				} catch (NoSuchFieldException | IllegalAccessException e) {
					e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
				}

			}
		}

		buildMenuBar();
		frame.setIconImage(frame.getToolkit().getImage("icon2.png"));
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		Dimension current_resolution = Toolkit.getDefaultToolkit().getScreenSize();
		frame.setMinimumSize(new Dimension((int)(current_resolution.width*0.5), (int)(current_resolution.height*0.5)));
		frame.setPreferredSize(new Dimension((int)(current_resolution.width*0.7), (int)(current_resolution.height*0.7)));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}