	public void initThumbnails(final List<MagicCard> cards, final boolean activateCards) {

		if(t!=null && t.isAlive())
			t.stop();

		c.weightx = 1;
		  c.weighty = 1;
		  c.gridx = 0;
		  c.gridy = 0;
		  c.insets = new Insets(2,2,2,2);
		  c.anchor = GridBagConstraints.NORTHWEST;

		  this.removeAll();
		  index=0;

		  t = new Thread(()->{

				for(MagicCard mc : cards)
				{
					if(d==null)
						d=MTGControler.getInstance().getCardsDimension();

					DisplayableCard lab = new DisplayableCard(mc,d,activateCards);
					lab.setTappable(activateCards);

					try {
						if(mc.getEditions().get(0).getMultiverse_id()=="0")
							lab.setText(mc.getName());

						addComponent(lab);
						revalidate();
					} catch (Exception e) {
						lab.setText(mc.getName());
						lab.setBorder(new LineBorder(Color.BLACK));
					}

				}
		});

		t.start();
		}

	public void initThumbnails(final List<MagicCard> cards, final boolean activateCards) {

		if(t!=null && t.isAlive())
			t.stop();

		c.weightx = 1;
		  c.weighty = 1;
		  c.gridx = 0;
		  c.gridy = 0;
		  c.insets = new Insets(2,2,2,2);
		  c.anchor = GridBagConstraints.NORTHWEST;

		  this.removeAll();
		  index=0;

		  t = new Thread(new Runnable() {

			@Override
			public void run() {

				for(MagicCard mc : cards)
				{
					if(d==null)
						d=MTGControler.getInstance().getCardsDimension();

					DisplayableCard lab = new DisplayableCard(mc,d,activateCards);
					lab.setTappable(activateCards);

					try {
						if(mc.getEditions().get(0).getMultiverse_id()=="0")
							lab.setText(mc.getName());

						addComponent(lab);
						revalidate();
					} catch (Exception e) {
						lab.setText(mc.getName());
						lab.setBorder(new LineBorder(Color.BLACK));
					}

				}

			}
		});

		t.start();
		}

Replace Anonymous With Lambda org.magic.game.gui.components.HandPanel.initThumbnails.new Thread.new Runnable with () -> {for(MagicCard mc: cards){if(d == null)d=MTGControler.getInstance().getCardsDimension(); in method public initThumbnails(cards List<MagicCard>, activateCards boolean) : void from class org.magic.game.gui.components.HandPanel


	protected void loadPrices(final MagicCard card) {
		ThreadManager.getInstance().execute(()->{
				try {
					modelPrices.init(card, card.getEditions().get(0));
					modelPrices.fireTableDataChanged();
				} catch (Exception e) {
					logger.error(e);
				}
		},"addTreeSelectionListener init graph cards");

	}

	protected void loadPrices(final MagicCard card) {
		ThreadManager.getInstance().execute(new Runnable() {
			public void run() {
				try {
					modelPrices.init(card, card.getEditions().get(0));
					modelPrices.fireTableDataChanged();
				} catch (Exception e) {
					logger.error(e);
				}

			}
		},"addTreeSelectionListener init graph cards");

	}

Replace Anonymous With Lambda org.magic.gui.CollectionPanelGUI.loadPrices.execute.new Runnable with () -> {trymodelPrices.init(card,card.getEditions().get(0)); in method protected loadPrices(card MagicCard) : void from class org.magic.gui.CollectionPanelGUI


	public void initPopupCollection() throws SQLException{

		popupMenuEdition = new JPopupMenu();
		popupMenuCards = new JPopupMenu();

		JMenu menuItemAdd = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("ADD_MISSING_CARDS_IN"));
		JMenu menuItemMove = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("MOVE_CARD_TO"));

		for (MagicCollection mc : dao.getCollections()) {
			JMenuItem adds = new JMenuItem(mc.getName());
			JMenuItem movs = new JMenuItem(mc.getName());

			movs.addActionListener(e-> {
					DefaultMutableTreeNode nodeCol = ((DefaultMutableTreeNode) path.getPathComponent(1));
					DefaultMutableTreeNode nodeCd = ((DefaultMutableTreeNode) path.getPathComponent(3));
					MagicCard card = (MagicCard) nodeCd.getUserObject();
					MagicCollection oldCol = (MagicCollection)nodeCol.getUserObject();

					final String collec = ((JMenuItem) e.getSource()).getText();
					MagicCollection nmagicCol = new MagicCollection();
					nmagicCol.setName(collec);

					try {
						dao.removeCard(card, oldCol);
						dao.saveCard(card, nmagicCol);
						nodeCd.removeFromParent();
						nodeCol.add(new DefaultMutableTreeNode(card));
						tree.refresh();
					} catch (SQLException e1) {
						logger.error(e1);
					}

			});

			adds.addActionListener(e->{

					final String destinationCollection = ((JMenuItem) e.getSource()).getText();
					ThreadManager.getInstance().execute(()->{
							try {
								DefaultMutableTreeNode node = ((DefaultMutableTreeNode) path.getPathComponent(2));
								MagicEdition me = (MagicEdition) node.getUserObject();

								MagicCollection col = new MagicCollection();
								col.setName(destinationCollection);
								List<MagicCard> sets = provider.searchCardByCriteria("set", me.getId(),null,false);

								MagicCollection sourceCol = new MagicCollection();
								sourceCol.setName(node.getPath()[1].toString());

								List<MagicCard> list = dao.getCardsFromCollection(sourceCol, me);
								sets.removeAll(list);

								for (MagicCard m : sets)
									dao.saveCard(m, col);

								tree.refresh();
							} catch (Exception e1) {
								MTGLogger.printStackTrace(e1);
							}
					},"btnAdds addCardsCollection");
			});

			menuItemAdd.add(adds);
			menuItemMove.add(movs);
		}

		JMenuItem it = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("MASS_MOVEMENTS"));
		it.addActionListener(e->{
				MagicCollection col = (MagicCollection) ((DefaultMutableTreeNode) path.getPathComponent(1)).getUserObject();
				MagicEdition edition = (MagicEdition) ((DefaultMutableTreeNode) path.getPathComponent(2)).getUserObject();
				MassMoverDialog d = new MassMoverDialog(col,edition);
				d.setVisible(true);
				logger.debug("closing mass import with change =" + d.hasChange());
		});
		popupMenuEdition.add(it);

		popupMenuEdition.add(menuItemAdd);
		popupMenuCards.add(menuItemMove);
	}

	public void initPopupCollection() throws SQLException{

		popupMenuEdition = new JPopupMenu();
		popupMenuCards = new JPopupMenu();

		JMenu menuItemAdd = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("ADD_MISSING_CARDS_IN"));
		JMenu menuItemMove = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("MOVE_CARD_TO"));

		for (MagicCollection mc : dao.getCollections()) {
			JMenuItem adds = new JMenuItem(mc.getName());
			JMenuItem movs = new JMenuItem(mc.getName());

			movs.addActionListener(e-> {
					DefaultMutableTreeNode nodeCol = ((DefaultMutableTreeNode) path.getPathComponent(1));
					DefaultMutableTreeNode nodeCd = ((DefaultMutableTreeNode) path.getPathComponent(3));
					MagicCard card = (MagicCard) nodeCd.getUserObject();
					MagicCollection oldCol = (MagicCollection)nodeCol.getUserObject();

					final String collec = ((JMenuItem) e.getSource()).getText();
					MagicCollection nmagicCol = new MagicCollection();
					nmagicCol.setName(collec);

					try {
						dao.removeCard(card, oldCol);
						dao.saveCard(card, nmagicCol);
						nodeCd.removeFromParent();
						nodeCol.add(new DefaultMutableTreeNode(card));
						tree.refresh();
					} catch (SQLException e1) {
						logger.error(e1);
					}

			});

			adds.addActionListener(e->{

					final String destinationCollection = ((JMenuItem) e.getSource()).getText();
					ThreadManager.getInstance().execute(new Runnable() {

						@Override
						public void run() {
							try {
								DefaultMutableTreeNode node = ((DefaultMutableTreeNode) path.getPathComponent(2));
								MagicEdition me = (MagicEdition) node.getUserObject();

								MagicCollection mc = new MagicCollection();
								mc.setName(destinationCollection);
								List<MagicCard> sets = provider.searchCardByCriteria("set", me.getId(),null,false);

								MagicCollection sourceCol = new MagicCollection();
								sourceCol.setName(node.getPath()[1].toString());

								List<MagicCard> list = dao.getCardsFromCollection(sourceCol, me);
								sets.removeAll(list);

								for (MagicCard m : sets)
									dao.saveCard(m, mc);

								tree.refresh();
							} catch (Exception e1) {
								MTGLogger.printStackTrace(e1);
							}

						}
					},"btnAdds addCardsCollection");
			});

			menuItemAdd.add(adds);
			menuItemMove.add(movs);
		}

		JMenuItem it = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("MASS_MOVEMENTS"));
		it.addActionListener(e->{
				MagicCollection col = (MagicCollection) ((DefaultMutableTreeNode) path.getPathComponent(1)).getUserObject();
				MagicEdition edition = (MagicEdition) ((DefaultMutableTreeNode) path.getPathComponent(2)).getUserObject();
				MassMoverDialog d = new MassMoverDialog(col,edition);
				d.setVisible(true);
				logger.debug("closing mass import with change =" + d.hasChange());
		});
		popupMenuEdition.add(it);

		popupMenuEdition.add(menuItemAdd);
		popupMenuCards.add(menuItemMove);
	}

Replace Anonymous With Lambda org.magic.gui.CollectionPanelGUI.initPopupCollection.addActionListener.execute.new Runnable with () -> {tryDefaultMutableTreeNode node=((DefaultMutableTreeNode)path.getPathComponent(2)); in method public initPopupCollection() : void from class org.magic.gui.CollectionPanelGUI


	public StockPanelGUI() {
		logger.info("init StockManagment GUI");

		initGUI();

		btnSave.addActionListener(e->{

				ThreadManager.getInstance().execute(()->{
						for(MagicCardStock ms : model.getList())
							if(ms.isUpdate())
								try {
									lblLoading.setVisible(true);
									MTGControler.getInstance().getEnabledDAO().saveOrUpdateStock(ms);
									ms.setUpdate(false);
									lblLoading.setVisible(false);
								} catch (SQLException e1) {
									JOptionPane.showMessageDialog(null, e1.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR") + " : " + ms,JOptionPane.ERROR_MESSAGE);
									lblLoading.setVisible(false);
								}

						model.fireTableDataChanged();
				}, "Batch stock save");
		});

		table.getSelectionModel().addListSelectionListener(event->{

	        	if(!multiselection && !event.getValueIsAdjusting())
	        	{
	        			int viewRow = table.getSelectedRow();
			        	if(viewRow>-1)
			        	{
			        		int modelRow = table.convertRowIndexToModel(viewRow);
							MagicCardStock selectedStock = (MagicCardStock)table.getModel().getValueAt(modelRow, 0);
							btnDelete.setEnabled(true);
							magicCardDetailPanel.setMagicCard(selectedStock.getMagicCard());
			        	}
	        	}
	    });

		btnDelete.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null,
											MTGControler.getInstance().getLangService().getCapitalize("CONFIRM_DELETE",table.getSelectedRows().length + " item(s)"),
											MTGControler.getInstance().getLangService().getCapitalize("DELETE") +" ?",
											JOptionPane.YES_NO_OPTION);
				if(res==JOptionPane.YES_OPTION)
					{
					ThreadManager.getInstance().execute(()->{
							try {
								int[] selected  = table.getSelectedRows();
								lblLoading.setVisible(true);
								List<MagicCardStock> stocks = extract(selected);
								model.removeRows(stocks);
								updateCount();
							}
							catch(Exception e)
							{
								JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
								lblLoading.setVisible(false);
							}
							lblLoading.setVisible(false);
							updateCount();

					}, "delete stock");

					}
		});

		btnReload.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null, MTGControler.getInstance().getLangService().getCapitalize("CANCEL_CHANGES"),MTGControler.getInstance().getLangService().getCapitalize("CONFIRM_UNDO"),JOptionPane.YES_NO_OPTION);
				if(res==JOptionPane.YES_OPTION)
				{
					logger.debug("reload collection");
					ThreadManager.getInstance().execute(()->{
							try {
								lblLoading.setVisible(true);
								model.init();
							} catch (SQLException e1) {
								JOptionPane.showMessageDialog(null, e1.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
							}
							lblLoading.setVisible(false);
							updateCount();
					}, "reload stock");

				}

		});

		btnshowMassPanel.addActionListener(event->rightPanel.setVisible(!rightPanel.isVisible()));

		btnImport.addActionListener(ae->{
				JPopupMenu menu = new JPopupMenu();

				JMenuItem mnuImportSearch = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("SEARCH_MODULE")));
				mnuImportSearch.setIcon(MTGConstants.ICON_SEARCH);

				mnuImportSearch.addActionListener(importAE->{
						CardSearchImportDialog cdSearch = new CardSearchImportDialog();
						cdSearch.setVisible(true);
						if(cdSearch.getSelection()!=null)
						{
							for(MagicCard mc : cdSearch.getSelection())
								addCard(mc);
						}
				});
				menu.add(mnuImportSearch);

				JMenuItem mnuCol = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("COLLECTION_MODULE")));
				mnuCol.setIcon(MTGConstants.ICON_COLLECTION);
				mnuCol.addActionListener(collEvent->{
						CollectionChooserDialog diag = new CollectionChooserDialog();
						diag.setVisible(true);
						final MagicCollection col = diag.getSelectedCollection();

						if(col!=null)
						{	ThreadManager.getInstance().execute(()->{
									lblLoading.setVisible(true);
									try {
										importFromCollection(col);
									} catch (SQLException e) {
										JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);

									}
									lblLoading.setVisible(false);
									updateCount();
							}, "Import stock from collection");
						}

				});
				menu.add(mnuCol);

				JMenuItem webSite = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("WEBSITE")));
				webSite.setIcon(MTGConstants.ICON_WEBSITE);
				webSite.addActionListener(siteEvent-> {
						DeckSnifferDialog diag = new DeckSnifferDialog();
						diag.setModal(true);
						diag.setVisible(true);

						if (diag.getSelectedDeck() != null) {
							lblLoading.setVisible(true);
							MagicDeck deck = diag.getSelectedDeck();
							importFromWebSite(deck);
							updateCount();
							lblLoading.setVisible(false);
						}
				});
				menu.add(webSite);

				for (final CardExporter exp : MTGControler.getInstance().getEnabledDeckExports()) {
					JMenuItem it = new JMenuItem();
					it.setIcon(exp.getIcon());
					it.setText(exp.getName());
					it.addActionListener(itemEvent-> {
							JFileChooser jf = new JFileChooser(".");
							jf.setFileFilter(new FileFilter() {

								@Override
								public String getDescription() {
									return exp.getName();
								}

								@Override
								public boolean accept(File f) {
									if (f.isDirectory())
										return true;

									return f.getName().endsWith(exp.getFileExtension());
								}
							});
							int res = jf.showOpenDialog(null);
							final File f = jf.getSelectedFile();

							if (res == JFileChooser.APPROVE_OPTION)
								ThreadManager.getInstance().execute(()->{
										try {
											lblLoading.setVisible(true);
											List<MagicCardStock> list = exp.importStock(f);
											for(MagicCardStock mc : list)
											{
												addStock(mc);
											}
											model.fireTableDataChanged();
											updateCount();
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, MTGControler.getInstance().getLangService().combine("IMPORT","FINISHED"),exp.getName() + " "+MTGControler.getInstance().getLangService().getCapitalize("FINISHED"), JOptionPane.INFORMATION_MESSAGE);

										} catch (Exception e) {
											logger.error(e);
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);
										}

								}, "import " + exp);
					});

					menu.add(it);
				}

				Component b = (Component) ae.getSource();
				Point p = b.getLocationOnScreen();
				menu.show(b, 0, 0);
				menu.setLocation(p.x, p.y + b.getHeight());
			}
		);

		btnExport.addActionListener(event->{
				JPopupMenu menu = new JPopupMenu();

				for (final CardExporter exp : MTGControler.getInstance().getEnabledDeckExports()) {
					JMenuItem it = new JMenuItem();
					it.setIcon(exp.getIcon());
					it.setText(exp.getName());
					it.addActionListener(itEvent-> {
							JFileChooser jf = new JFileChooser(".");
							jf.setFileFilter(new FileFilter() {

								@Override
								public String getDescription() {
									return exp.getName();
								}

								@Override
								public boolean accept(File f) {
									if (f.isDirectory())
										return true;

									if (f.getName().endsWith(exp.getFileExtension()))
										return true;

									return false;
								}
							});
							int res = jf.showSaveDialog(null);
							final File f = jf.getSelectedFile();

							if (res == JFileChooser.APPROVE_OPTION)
								ThreadManager.getInstance().execute(()->{
										try {
											lblLoading.setVisible(true);

											exp.exportStock(model.getList(), f);

											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null,  MTGControler.getInstance().getLangService().combine("EXPORT","FINISHED"), exp.getName() + " " +MTGControler.getInstance().getLangService().getCapitalize("FINISHED"), JOptionPane.INFORMATION_MESSAGE);

										} catch (Exception e) {
											logger.error(e);
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);
										}
								}, "export " + exp);

					});

					menu.add(it);
				}

				Component b = (Component) event.getSource();
				Point p = b.getLocationOnScreen();
				menu.show(b, 0, 0);
				menu.setLocation(p.x, p.y + b.getHeight());

		});

		btnGeneratePrice.addActionListener(ae->{
				ThreadManager.getInstance().execute(()-> {
						lblLoading.setVisible(true);
						for(int i : table.getSelectedRows())
						{
							MagicCardStock s = (MagicCardStock)table.getModel().getValueAt(table.convertRowIndexToModel(i), 0);
							Collection<Double> prices;
							Double price=0.0;
							try {
								prices = MTGControler.getInstance().getEnabledDashBoard().getPriceVariation(s.getMagicCard(),null).values();
								if(!prices.isEmpty())
									price = (Double)prices.toArray()[prices.size()-1];
								else
									price=0.0;
							} catch (IOException e) {
								price=0.0;
							}
							double old = s.getPrice();
							s.setPrice(price);
							if(old!=s.getPrice())
								s.setUpdate(true);

							model.fireTableDataChanged();
						}
						lblLoading.setVisible(false);

				}, "generate prices for stock");
		});

		cboSelections.addItemListener(ie-> {
				multiselection=true;
				if(String.valueOf(cboSelections.getSelectedItem()).equals(selections[1]))
				{
					table.clearSelection();

					for(int i=0;i<table.getRowCount();i++)
					{

						if(table.getValueAt(i, 0).toString().equals("-1"))
						{
							table.addRowSelectionInterval(i,i);
						}
					}

				}
				else if(String.valueOf(cboSelections.getSelectedItem()).equals(selections[2]))
				{
					table.clearSelection();

					for(int i=0;i<table.getRowCount();i++)
					{
						if(((MagicCardStock)table.getValueAt(i, 0)).isUpdate())
							table.addRowSelectionInterval(i,i);
					}
				}
				multiselection=false;
		});

		btnApplyModification.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null,  MTGControler.getInstance().getLangService().getCapitalize("CHANGE_X_ITEMS",table.getSelectedRowCount()),  MTGControler.getInstance().getLangService().getCapitalize("CONFIRMATION"), JOptionPane.YES_NO_CANCEL_OPTION);
				if(res==JOptionPane.YES_OPTION)
				{
					for(int i : table.getSelectedRows())
					{
						MagicCardStock s = (MagicCardStock)table.getModel().getValueAt(table.convertRowIndexToModel(i), 0);
						s.setUpdate(true);
						if(((Integer)spinner.getValue()).intValue()>0)
							s.setQte((Integer)spinner.getValue());
						if(!textPane.getText().equals(""))
							s.setComment(textPane.getText());
						if(cboAltered.getSelectedItem()!=null)
							s.setAltered((Boolean)cboAltered.getSelectedItem());
						if(cboSigned.getSelectedItem()!=null)
							s.setSigned((Boolean)cboSigned.getSelectedItem());
						if(cboFoil.getSelectedItem()!=null)
							s.setFoil((Boolean)cboFoil.getSelectedItem());
						if(cboLanguages!=null)
							s.setLanguage(String.valueOf(cboLanguages.getSelectedItem()));
						if(cboQuality.getSelectedItem()!=null)
							s.setCondition((EnumCondition)cboQuality.getSelectedItem());
						if(cboCollection.getSelectedItem()!=null)
							s.setMagicCollection((MagicCollection)cboCollection.getSelectedItem());

					}
					model.fireTableDataChanged();
				}
		});

	}

	public StockPanelGUI() {
		logger.info("init StockManagment GUI");

		initGUI();

		btnSave.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				ThreadManager.getInstance().execute(new Runnable() {

					@Override
					public void run() {
						for(MagicCardStock ms : model.getList())
							if(ms.isUpdate())
								try {
									lblLoading.setVisible(true);
									MTGControler.getInstance().getEnabledDAO().saveOrUpdateStock(ms);
									ms.setUpdate(false);
									lblLoading.setVisible(false);
								} catch (SQLException e1) {
									JOptionPane.showMessageDialog(null, e1.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR") + " : " + ms,JOptionPane.ERROR_MESSAGE);
									lblLoading.setVisible(false);
								}

						model.fireTableDataChanged();

					}
				}, "Batch stock save");
			}

		});

		table.getSelectionModel().addListSelectionListener(event->{

	        	if(!multiselection && !event.getValueIsAdjusting())
	        	{
	        			int viewRow = table.getSelectedRow();
			        	if(viewRow>-1)
			        	{
			        		int modelRow = table.convertRowIndexToModel(viewRow);
							MagicCardStock selectedStock = (MagicCardStock)table.getModel().getValueAt(modelRow, 0);
							btnDelete.setEnabled(true);
							magicCardDetailPanel.setMagicCard(selectedStock.getMagicCard());
			        	}
	        	}
	    });

		btnDelete.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null,
											MTGControler.getInstance().getLangService().getCapitalize("CONFIRM_DELETE",table.getSelectedRows().length + " item(s)"),
											MTGControler.getInstance().getLangService().getCapitalize("DELETE") +" ?",
											JOptionPane.YES_NO_OPTION);
				if(res==JOptionPane.YES_OPTION)
					{
					ThreadManager.getInstance().execute(()->{
							try {
								int[] selected  = table.getSelectedRows();
								lblLoading.setVisible(true);
								List<MagicCardStock> stocks = extract(selected);
								model.removeRows(stocks);
								updateCount();
							}
							catch(Exception e)
							{
								JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
								lblLoading.setVisible(false);
							}
							lblLoading.setVisible(false);
							updateCount();

					}, "delete stock");

					}
		});

		btnReload.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null, MTGControler.getInstance().getLangService().getCapitalize("CANCEL_CHANGES"),MTGControler.getInstance().getLangService().getCapitalize("CONFIRM_UNDO"),JOptionPane.YES_NO_OPTION);
				if(res==JOptionPane.YES_OPTION)
				{
					logger.debug("reload collection");
					ThreadManager.getInstance().execute(new Runnable() {

						@Override
						public void run() {
							try {
								lblLoading.setVisible(true);
								model.init();
							} catch (SQLException e1) {
								JOptionPane.showMessageDialog(null, e1.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
							}
							lblLoading.setVisible(false);
							updateCount();
						}
					}, "reload stock");

				}

		});

		btnshowMassPanel.addActionListener(event->rightPanel.setVisible(!rightPanel.isVisible()));

		btnImport.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				JPopupMenu menu = new JPopupMenu();

				JMenuItem mnuImportSearch = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("SEARCH_MODULE")));
				mnuImportSearch.setIcon(MTGConstants.ICON_SEARCH);

				mnuImportSearch.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						CardSearchImportDialog cdSearch = new CardSearchImportDialog();
						cdSearch.setVisible(true);
						if(cdSearch.getSelection()!=null)
						{
							for(MagicCard mc : cdSearch.getSelection())
								addCard(mc);
						}
					}
				});
				menu.add(mnuImportSearch);

				JMenuItem mnuCol = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("COLLECTION_MODULE")));
				mnuCol.setIcon(MTGConstants.ICON_COLLECTION);
				mnuCol.addActionListener(collEvent->{
						CollectionChooserDialog diag = new CollectionChooserDialog();
						diag.setVisible(true);
						final MagicCollection col = diag.getSelectedCollection();

						if(col!=null)
						{	ThreadManager.getInstance().execute(()->{
									lblLoading.setVisible(true);
									try {
										importFromCollection(col);
									} catch (SQLException e) {
										JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);

									}
									lblLoading.setVisible(false);
									updateCount();
							}, "Import stock from collection");
						}

				});
				menu.add(mnuCol);

				JMenuItem webSite = new JMenuItem(MTGControler.getInstance().getLangService().getCapitalize("IMPORT_FROM",MTGControler.getInstance().getLangService().get("WEBSITE")));
				webSite.setIcon(MTGConstants.ICON_WEBSITE);
				webSite.addActionListener(siteEvent-> {
						DeckSnifferDialog diag = new DeckSnifferDialog();
						diag.setModal(true);
						diag.setVisible(true);

						if (diag.getSelectedDeck() != null) {
							lblLoading.setVisible(true);
							MagicDeck deck = diag.getSelectedDeck();
							importFromWebSite(deck);
							updateCount();
							lblLoading.setVisible(false);
						}
				});
				menu.add(webSite);

				for (final CardExporter exp : MTGControler.getInstance().getEnabledDeckExports()) {
					JMenuItem it = new JMenuItem();
					it.setIcon(exp.getIcon());
					it.setText(exp.getName());
					it.addActionListener(itemEvent-> {
							JFileChooser jf = new JFileChooser(".");
							jf.setFileFilter(new FileFilter() {

								@Override
								public String getDescription() {
									return exp.getName();
								}

								@Override
								public boolean accept(File f) {
									if (f.isDirectory())
										return true;

									if (f.getName().endsWith(exp.getFileExtension()))
										return true;

									return false;
								}
							});
							int res = jf.showOpenDialog(null);
							final File f = jf.getSelectedFile();

							if (res == JFileChooser.APPROVE_OPTION)
								ThreadManager.getInstance().execute(()->{
										try {
											lblLoading.setVisible(true);
											List<MagicCardStock> list = exp.importStock(f);
											for(MagicCardStock mc : list)
											{
												addStock(mc);
											}
											model.fireTableDataChanged();
											updateCount();
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, MTGControler.getInstance().getLangService().combine("IMPORT","FINISHED"),exp.getName() + " "+MTGControler.getInstance().getLangService().getCapitalize("FINISHED"), JOptionPane.INFORMATION_MESSAGE);

										} catch (Exception e) {
											logger.error(e);
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);
										}

								}, "import " + exp);
					});

					menu.add(it);
				}

				Component b = (Component) ae.getSource();
				Point p = b.getLocationOnScreen();
				menu.show(b, 0, 0);
				menu.setLocation(p.x, p.y + b.getHeight());
			}
		});

		btnExport.addActionListener(event->{
				JPopupMenu menu = new JPopupMenu();

				for (final CardExporter exp : MTGControler.getInstance().getEnabledDeckExports()) {
					JMenuItem it = new JMenuItem();
					it.setIcon(exp.getIcon());
					it.setText(exp.getName());
					it.addActionListener(itEvent-> {
							JFileChooser jf = new JFileChooser(".");
							jf.setFileFilter(new FileFilter() {

								@Override
								public String getDescription() {
									return exp.getName();
								}

								@Override
								public boolean accept(File f) {
									if (f.isDirectory())
										return true;

									if (f.getName().endsWith(exp.getFileExtension()))
										return true;

									return false;
								}
							});
							int res = jf.showSaveDialog(null);
							final File f = jf.getSelectedFile();

							if (res == JFileChooser.APPROVE_OPTION)
								ThreadManager.getInstance().execute(()->{
										try {
											lblLoading.setVisible(true);

											exp.exportStock(model.getList(), f);

											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null,  MTGControler.getInstance().getLangService().combine("EXPORT","FINISHED"), exp.getName() + " " +MTGControler.getInstance().getLangService().getCapitalize("FINISHED"), JOptionPane.INFORMATION_MESSAGE);

										} catch (Exception e) {
											logger.error(e);
											lblLoading.setVisible(false);
											JOptionPane.showMessageDialog(null, e, MTGControler.getInstance().getLangService().getCapitalize("ERROR"), JOptionPane.ERROR_MESSAGE);
										}
								}, "export " + exp);

					});

					menu.add(it);
				}

				Component b = (Component) event.getSource();
				Point p = b.getLocationOnScreen();
				menu.show(b, 0, 0);
				menu.setLocation(p.x, p.y + b.getHeight());

		});

		btnGeneratePrice.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ThreadManager.getInstance().execute(()-> {
						lblLoading.setVisible(true);
						for(int i : table.getSelectedRows())
						{
							MagicCardStock s = (MagicCardStock)table.getModel().getValueAt(table.convertRowIndexToModel(i), 0);
							Collection<Double> prices;
							Double price=0.0;
							try {
								prices = MTGControler.getInstance().getEnabledDashBoard().getPriceVariation(s.getMagicCard(),null).values();
								if(!prices.isEmpty())
									price = (Double)prices.toArray()[prices.size()-1];
								else
									price=0.0;
							} catch (IOException e) {
								price=0.0;
							}
							double old = s.getPrice();
							s.setPrice(price);
							if(old!=s.getPrice())
								s.setUpdate(true);

							model.fireTableDataChanged();
						}
						lblLoading.setVisible(false);

				}, "generate prices for stock");

			}
		});

		cboSelections.addItemListener(ie-> {
				multiselection=true;
				if(String.valueOf(cboSelections.getSelectedItem()).equals(selections[1]))
				{
					table.clearSelection();

					for(int i=0;i<table.getRowCount();i++)
					{

						if(table.getValueAt(i, 0).toString().equals("-1"))
						{
							table.addRowSelectionInterval(i,i);
						}
					}

				}
				else if(String.valueOf(cboSelections.getSelectedItem()).equals(selections[2]))
				{
					table.clearSelection();

					for(int i=0;i<table.getRowCount();i++)
					{
						if(((MagicCardStock)table.getValueAt(i, 0)).isUpdate())
							table.addRowSelectionInterval(i,i);
					}
				}
				multiselection=false;
		});

		btnApplyModification.addActionListener(event-> {
				int res = JOptionPane.showConfirmDialog(null,  MTGControler.getInstance().getLangService().getCapitalize("CHANGE_X_ITEMS",table.getSelectedRowCount()),  MTGControler.getInstance().getLangService().getCapitalize("CONFIRMATION"), JOptionPane.YES_NO_CANCEL_OPTION);
				if(res==JOptionPane.YES_OPTION)
				{
					for(int i : table.getSelectedRows())
					{
						MagicCardStock s = (MagicCardStock)table.getModel().getValueAt(table.convertRowIndexToModel(i), 0);
						s.setUpdate(true);
						if(((Integer)spinner.getValue()).intValue()>0)
							s.setQte((Integer)spinner.getValue());
						if(!textPane.getText().equals(""))
							s.setComment(textPane.getText());
						if(cboAltered.getSelectedItem()!=null)
							s.setAltered((Boolean)cboAltered.getSelectedItem());
						if(cboSigned.getSelectedItem()!=null)
							s.setSigned((Boolean)cboSigned.getSelectedItem());
						if(cboFoil.getSelectedItem()!=null)
							s.setFoil((Boolean)cboFoil.getSelectedItem());
						if(cboLanguages!=null)
							s.setLanguage(String.valueOf(cboLanguages.getSelectedItem()));
						if(cboQuality.getSelectedItem()!=null)
							s.setCondition((EnumCondition)cboQuality.getSelectedItem());
						if(cboCollection.getSelectedItem()!=null)
							s.setMagicCollection((MagicCollection)cboCollection.getSelectedItem());

					}
					model.fireTableDataChanged();
				}
		});

	}

Replace Anonymous With Lambda org.magic.gui.StockPanelGUI.StockPanelGUI.addActionListener.new ActionListener with ae -> {JPopupMenu menu=new JPopupMenu(); in method public StockPanelGUI() from class org.magic.gui.StockPanelGUI


			@Override
		    public void mouseClicked(MouseEvent evt) {
		        if (evt.getClickCount() == 1) {
		        	evt.consume();

		        		ThreadManager.getInstance().execute(()->{
								lblLoading.setVisible(true);
					        	try {
					        		editorPane.setText(Jsoup.connect(listResult.getSelectedValue().getUrl().toString()).get().select("div#content-detail-page-of-an-article").html());

					        	} catch (Exception e) {
									JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
								}
					        	lblLoading.setVisible(false);
						},"Load story");
		        }
		        else
		        {
		        	try {
						Desktop.getDesktop().browse(listResult.getSelectedValue().getUrl().toURI());
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
					}
		        }
		    }

			@Override
		    public void mouseClicked(MouseEvent evt) {
		        if (evt.getClickCount() == 1) {
		        	evt.consume();

		        		ThreadManager.getInstance().execute(new Runnable() {

							@Override
							public void run() {
								lblLoading.setVisible(true);
					        	try {
					        		editorPane.setText(Jsoup.connect(listResult.getSelectedValue().getUrl().toString()).get().select("div#content-detail-page-of-an-article").html());

					        	} catch (Exception e) {
									JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
								}
					        	lblLoading.setVisible(false);
							}
						},"Load story");

		        }
		        else
		        {
		        	try {
						Desktop.getDesktop().browse(listResult.getSelectedValue().getUrl().toURI());
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null, e.getMessage(),MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
					}
		        }
		    }

Replace Anonymous With Lambda org.magic.gui.StoriesGUI.initGUI.addMouseListener.new MouseAdapter.mouseClicked.execute.new Runnable with () -> {lblLoading.setVisible(true); in method public mouseClicked(evt MouseEvent) : void from class org.magic.gui.StoriesGUI.initGUI.addMouseListener.new MouseAdapter


		public void initPopupCollection() throws Exception
		{
			JMenu menuItemAdd = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("ADD"));

			for(MagicCollection mc : MTGControler.getInstance().getEnabledDAO().getCollections())
			{

				JMenuItem adds = new JMenuItem(mc.getName());
				adds.addActionListener(addEvent->{

						String collec = ((JMenuItem)addEvent.getSource()).getText();
						loading(true, MTGControler.getInstance().getLangService().getCapitalize("ADD_CARDS_TO")+" " + collec);

						for (int i = 0; i < tableCards.getSelectedRowCount(); i++) {

							int viewRow = tableCards.getSelectedRows()[i];
							int modelRow = tableCards.convertRowIndexToModel(viewRow);

							MagicCard mcCard = (MagicCard)tableCards.getModel().getValueAt(modelRow, 0);
							try {
								MTGControler.getInstance().getEnabledDAO().saveCard(mcCard, MTGControler.getInstance().getEnabledDAO().getCollection(collec));
							} catch (SQLException e1) {
								logger.error(e1);
								JOptionPane.showMessageDialog(null, e1,MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
							}

						}
						loading(false, "");
					}
				);
				menuItemAdd.add(adds);
			}

			popupMenu.add(menuItemAdd);
		}

		public void initPopupCollection() throws Exception
		{
			JMenu menuItemAdd = new JMenu(MTGControler.getInstance().getLangService().getCapitalize("ADD"));

			for(MagicCollection mc : MTGControler.getInstance().getEnabledDAO().getCollections())
			{

				JMenuItem adds = new JMenuItem(mc.getName());
				adds.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent e) {

						String collec = ((JMenuItem)e.getSource()).getText();
						loading(true, MTGControler.getInstance().getLangService().getCapitalize("ADD_CARDS_TO")+" " + collec);

						for (int i = 0; i < tableCards.getSelectedRowCount(); i++) {

							int viewRow = tableCards.getSelectedRows()[i];
							int modelRow = tableCards.convertRowIndexToModel(viewRow);

							MagicCard mc = (MagicCard)tableCards.getModel().getValueAt(modelRow, 0);
							try {
								MTGControler.getInstance().getEnabledDAO().saveCard(mc, MTGControler.getInstance().getEnabledDAO().getCollection(collec));
							} catch (SQLException e1) {
								logger.error(e1);
								JOptionPane.showMessageDialog(null, e1,MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
							}

						}
						loading(false, "");
					}
				});
				menuItemAdd.add(adds);
			}

			popupMenu.add(menuItemAdd);
		}

Replace Anonymous With Lambda org.magic.gui.components.CardSearchPanel.initPopupCollection.addActionListener.new ActionListener with addEvent -> {String collec=((JMenuItem)addEvent.getSource()).getText(); in method public initPopupCollection() : void from class org.magic.gui.components.CardSearchPanel


				@Override
				public void mouseClicked(MouseEvent mev) {
						selectedEdition = listEdition.getSelectedValue();
						ThreadManager.getInstance().execute(()->{
									loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_EDITIONS"));
										try {
											selectedCard = MTGControler.getInstance().getEnabledProviders().searchCardByCriteria("name", selectedCard.getName(), selectedEdition,false).get(0);
											detailCardPanel.setMagicCard(selectedCard);
											magicEditionDetailPanel.setMagicEdition(selectedEdition);

										} catch (Exception e) {
											MTGLogger.printStackTrace(e);
										}
										cardsPicPanel.showPhoto(selectedCard);//backcard
									historyChartPanel.init(selectedCard, selectedEdition,selectedCard.getName());

										if(tabbedCardsInfo.getSelectedIndex()==INDEX_PRICES)
											updatePrices();

									loading(false,"");
						},"changeEdition");
				}

				@Override
				public void mouseClicked(MouseEvent mev) {
						selectedEdition = listEdition.getSelectedValue();
						ThreadManager.getInstance().execute(new Runnable() {
							public void run() {
									loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_EDITIONS"));
										try {
											selectedCard = MTGControler.getInstance().getEnabledProviders().searchCardByCriteria("name", selectedCard.getName(), selectedEdition,false).get(0);
											detailCardPanel.setMagicCard(selectedCard);
											magicEditionDetailPanel.setMagicEdition(selectedEdition);

										} catch (Exception e) {
											MTGLogger.printStackTrace(e);
										}
										cardsPicPanel.showPhoto(selectedCard);//backcard
									historyChartPanel.init(selectedCard, selectedEdition,selectedCard.getName());

										if(tabbedCardsInfo.getSelectedIndex()==INDEX_PRICES)
											updatePrices();

									loading(false,"");

							}
						},"changeEdition");
				}

Replace Anonymous With Lambda org.magic.gui.components.CardSearchPanel.initGUI.addMouseListener.new MouseAdapter.mouseClicked.execute.new Runnable with () -> {loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_EDITIONS")); in method public mouseClicked(mev MouseEvent) : void from class org.magic.gui.components.CardSearchPanel.initGUI.addMouseListener.new MouseAdapter


		public void updatePrices() {
			ThreadManager.getInstance().execute(()->{
					loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_PRICES"));
					priceModel.init(selectedCard, selectedEdition);
					priceModel.fireTableDataChanged();
					loading(false,"");
			},"updatePrices");

		}

		public void updatePrices() {
			ThreadManager.getInstance().execute(new Runnable() {

				@Override
				public void run() {

					loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_PRICES"));
					priceModel.init(selectedCard, selectedEdition);
					priceModel.fireTableDataChanged();
					loading(false,"");

				}
			},"updatePrices");

		}

Replace Anonymous With Lambda org.magic.gui.components.CardSearchPanel.updatePrices.execute.new Runnable with () -> {loading(true,MTGControler.getInstance().getLangService().getCapitalize("LOADING_PRICES")); in method public updatePrices() : void from class org.magic.gui.components.CardSearchPanel


		public void updateCards() {
			try {
				cboLanguages.removeAllItems();
				txtRulesArea.setText("");

				((DefaultListModel<MagicEdition>)listEdition.getModel()).removeAllElements();

				for(MagicCardNames mcn : selectedCard.getForeignNames())
					cboLanguages.addItem(mcn);

				for(MagicEdition me : selectedCard.getEditions())
					((DefaultListModel<MagicEdition>)listEdition.getModel()).addElement(me);

				detailCardPanel.setMagicCard(selectedCard,true);
				magicEditionDetailPanel.setMagicEdition(selectedCard.getEditions().get(0));

				for(MagicRuling mr : selectedCard.getRulings())
				{
					txtRulesArea.append(mr.toString());
					txtRulesArea.append("\n");
				}

				if(tabbedCardsInfo.getSelectedIndex()==INDEX_PRICES)
					updatePrices();

				panelJson.show(selectedCard);

				ThreadManager.getInstance().execute(()->historyChartPanel.init(selectedCard, selectedEdition,selectedCard.getName()), "load history for " + selectedEdition);

			} catch (Exception e1) {
				logger.error(e1);
			}

		}

		public void updateCards() {
			try {
				cboLanguages.removeAllItems();
				txtRulesArea.setText("");

				((DefaultListModel<MagicEdition>)listEdition.getModel()).removeAllElements();

				for(MagicCardNames mcn : selectedCard.getForeignNames())
					cboLanguages.addItem(mcn);

				for(MagicEdition me : selectedCard.getEditions())
					((DefaultListModel<MagicEdition>)listEdition.getModel()).addElement(me);

				detailCardPanel.setMagicCard(selectedCard,true);
				magicEditionDetailPanel.setMagicEdition(selectedCard.getEditions().get(0));

				for(MagicRuling mr : selectedCard.getRulings())
				{
					txtRulesArea.append(mr.toString());
					txtRulesArea.append("\n");
				}

				if(tabbedCardsInfo.getSelectedIndex()==INDEX_PRICES)
					updatePrices();

				panelJson.show(selectedCard);

				ThreadManager.getInstance().execute(new Runnable() {
					public void run() {
						historyChartPanel.init(selectedCard, selectedEdition,selectedCard.getName());
					}
				}, "load history for " + selectedEdition);

			} catch (Exception e1) {
				logger.error(e1);
			}

		}

Replace Anonymous With Lambda org.magic.gui.components.CardSearchPanel.updateCards.execute.new Runnable with () -> historyChartPanel.init(selectedCard,selectedEdition,selectedCard.getName()) in method public updateCards() : void from class org.magic.gui.components.CardSearchPanel


	public CardStockPanel() {
		setLayout(new BorderLayout(0, 0));
		layout = new GridLayout(1, 1, 0, 0);

		content=new JPanel();
		add(content,BorderLayout.CENTER);
		content.setLayout(layout);
		JPanel panneauHaut = new JPanel();
		add(panneauHaut, BorderLayout.NORTH);

		btnAdd = new JButton("");
		btnAdd.setEnabled(false);
		btnAdd.setIcon(MTGConstants.ICON_NEW);
		btnAdd.addActionListener(ae->{
				layout.setRows(layout.getRows()+1);
				content.add(new CardStockLinePanel(selectedCard,selectedCol));
				content.revalidate();
		});
		panneauHaut.add(btnAdd);
	}

	public CardStockPanel() {
		setLayout(new BorderLayout(0, 0));
		layout = new GridLayout(1, 1, 0, 0);

		content=new JPanel();
		add(content,BorderLayout.CENTER);
		content.setLayout(layout);
		JPanel panneauHaut = new JPanel();
		add(panneauHaut, BorderLayout.NORTH);

		btnAdd = new JButton("");
		btnAdd.setEnabled(false);
		btnAdd.setIcon(MTGConstants.ICON_NEW);
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				layout.setRows(layout.getRows()+1);
				content.add(new CardStockLinePanel(selectedCard,selectedCol));
				content.revalidate();
			}
		});
		panneauHaut.add(btnAdd);
	}

Replace Anonymous With Lambda org.magic.gui.components.CardStockPanel.CardStockPanel.addActionListener.new ActionListener with ae -> {layout.setRows(layout.getRows() + 1); in method public CardStockPanel() from class org.magic.gui.components.CardStockPanel


	public void showPhoto(MagicCard mc) {

		this.card=mc;

		if(!mc.isTranformable())
		{
			try {
				back=MTGControler.getInstance().getEnabledPicturesProvider().getBackPicture();
			} catch (Exception e1) {
				MTGLogger.printStackTrace(e1);
			}
		}
		else
		{
			try {
				MagicCard flipC = MTGControler.getInstance().getEnabledProviders().searchCardByCriteria("name",card.getRotatedCardName(),card.getEditions().get(0),true).get(0);
				back = MTGControler.getInstance().getEnabledPicturesProvider().getPicture(flipC,null);
			} catch (Exception e) {

			}
		}
		ThreadManager.getInstance().execute(()->{
				try {

					if(edition==null)
						imgFront=renderer.appendReflection(MTGControler.getInstance().getEnabledPicturesProvider().getPicture(card,null));
					else
						imgFront=renderer.appendReflection(MTGControler.getInstance().getEnabledPicturesProvider().getPicture(card,edition));

					back=mirroring(back);
					back=renderer.appendReflection(back);

					printed=imgFront;

					int x = 15;
				    int y = 15;

				    selectedShape= new Rectangle2D.Double(x, y, printed.getWidth(null),  printed.getHeight(null));

				} catch (Exception e) {
					imgFront=back;
				}
				repaint();
		},"showPhoto");
	}

	public void showPhoto(MagicCard mc) {

		this.card=mc;

		if(!mc.isTranformable())
		{
			try {
				back=MTGControler.getInstance().getEnabledPicturesProvider().getBackPicture();
			} catch (Exception e1) {
				MTGLogger.printStackTrace(e1);
			}
		}
		else
		{
			try {
				MagicCard flipC = MTGControler.getInstance().getEnabledProviders().searchCardByCriteria("name",card.getRotatedCardName(),card.getEditions().get(0),true).get(0);
				back = MTGControler.getInstance().getEnabledPicturesProvider().getPicture(flipC,null);
			} catch (Exception e) {

			}
		}
		ThreadManager.getInstance().execute(new Runnable() {

			@Override
			public void run() {
				try {

					if(edition==null)
						imgFront=renderer.appendReflection(MTGControler.getInstance().getEnabledPicturesProvider().getPicture(card,null));
					else
						imgFront=renderer.appendReflection(MTGControler.getInstance().getEnabledPicturesProvider().getPicture(card,edition));

					back=mirroring(back);
					back=renderer.appendReflection(back);

					printed=imgFront;

					int x = 15;
				    int y = 15;

				    selectedShape= new Rectangle2D.Double(x, y, printed.getWidth(null),  printed.getHeight(null));

				} catch (Exception e) {
					imgFront=back;
				}
				repaint();

			}
		},"showPhoto");
	}

Replace Anonymous With Lambda org.magic.gui.components.CardsPicPanel.showPhoto.execute.new Runnable with () -> {tryif(edition == null)imgFront=renderer.appendReflection(MTGControler.getInstance().getEnabledPicturesProvider().getPicture(card,null)); in method public showPhoto(mc MagicCard) : void from class org.magic.gui.components.CardsPicPanel


	public MagicCardDetailPanel() {

		gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 52, 382, 76, 0, 57, 32, 51, 0, 77, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0, 44, 0, 65, 25, 21, 0, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4 };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0E-4 };
		setLayout(gridBagLayout);

		JLabel nameLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("NAME") +" :");
		GridBagConstraints labelgbc5 = new GridBagConstraints();
		labelgbc5.insets = new Insets(5, 5, 5, 5);
		labelgbc5.gridx = 0;
		labelgbc5.gridy = 0;
		add(nameLabel, labelgbc5);

		nameJTextField = new JTextField();

		GridBagConstraints componentgbc5 = new GridBagConstraints();
		componentgbc5.insets = new Insets(5, 0, 5, 5);
		componentgbc5.fill = GridBagConstraints.HORIZONTAL;
		componentgbc5.gridx = 1;
		componentgbc5.gridy = 0;
		add(nameJTextField, componentgbc5);

		JLabel cmcLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_COST")+" :");
		GridBagConstraints labelgbc0 = new GridBagConstraints();
		labelgbc0.anchor = GridBagConstraints.EAST;
		labelgbc0.insets = new Insets(5, 5, 5, 5);
		labelgbc0.gridx = 2;
		labelgbc0.gridy = 0;
		add(cmcLabel, labelgbc0);

		cmcJTextField = new JTextField();
		GridBagConstraints componentgbc0 = new GridBagConstraints();
		componentgbc0.insets = new Insets(5, 0, 5, 5);
		componentgbc0.fill = GridBagConstraints.HORIZONTAL;
		componentgbc0.gridx = 4;
		componentgbc0.gridy = 0;
		add(cmcJTextField, componentgbc0);

				lblLogoSet = new JLabel("");
				GridBagConstraints gbclblLogoSet = new GridBagConstraints();
				gbclblLogoSet.gridwidth = 2;
				gbclblLogoSet.gridheight = 2;
				gbclblLogoSet.insets = new Insets(0, 0, 5, 5);
				gbclblLogoSet.gridx = 5;
				gbclblLogoSet.gridy = 0;
				add(lblLogoSet, gbclblLogoSet);

				btnAlert = new JButton("");
				btnAlert.setEnabled(false);
				Image b = MTGConstants.ICON_ALERT.getImage().getScaledInstance(16, 16, BufferedImage.SCALE_SMOOTH);
				btnAlert.setIcon(new ImageIcon(b));
				btnAlert.addActionListener(ae->{

						MagicCardAlert alert = new MagicCardAlert();
						alert.setCard(magicCard);
						String price = JOptionPane.showInputDialog(null,MTGControler.getInstance().getLangService().getCapitalize("SELECT_MAXIMUM_PRICE"), MTGControler.getInstance().getLangService().getCapitalize("ADD_ALERT_FOR",magicCard) , JOptionPane.QUESTION_MESSAGE);
						alert.setPrice(Double.parseDouble(price));

						try {
							MTGControler.getInstance().getEnabledDAO().saveAlert(alert);
						} catch (Exception e) {
							MTGLogger.printStackTrace(e);
							JOptionPane.showMessageDialog(null, e,MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
						}
				});

				GridBagConstraints gbcbtnAlert = new GridBagConstraints();
				gbcbtnAlert.insets = new Insets(0, 0, 5, 0);
				gbcbtnAlert.gridx = 8;
				gbcbtnAlert.gridy = 0;
				add(btnAlert, gbcbtnAlert);

				lblThumbnail = new JLabel("");
				GridBagConstraints gbclblThumbnail = new GridBagConstraints();
				gbclblThumbnail.fill = GridBagConstraints.HORIZONTAL;
				gbclblThumbnail.gridwidth = 2;
				gbclblThumbnail.gridheight = 9;
				gbclblThumbnail.gridx = 7;
				gbclblThumbnail.gridy = 1;
				add(lblThumbnail, gbclblThumbnail);

				JLabel fullTypeLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_TYPES")+" :");
				GridBagConstraints labelgbc2 = new GridBagConstraints();
				labelgbc2.insets = new Insets(5, 5, 5, 5);
				labelgbc2.gridx = 0;
				labelgbc2.gridy = 1;
				add(fullTypeLabel, labelgbc2);

				fullTypeJTextField = new JTextField();
				GridBagConstraints componentgbc2 = new GridBagConstraints();
				componentgbc2.insets = new Insets(5, 0, 5, 5);
				componentgbc2.fill = GridBagConstraints.HORIZONTAL;
				componentgbc2.gridx = 1;
				componentgbc2.gridy = 1;
				add(fullTypeJTextField, componentgbc2);

				JLabel costLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_MANA")+" :");
				GridBagConstraints labelgbc1 = new GridBagConstraints();
				labelgbc1.anchor = GridBagConstraints.EAST;
				labelgbc1.insets = new Insets(5, 5, 5, 5);
				labelgbc1.gridx = 2;
				labelgbc1.gridy = 1;
				add(costLabel, labelgbc1);

				manaPanel = new ManaPanel();
				GridBagConstraints componentgbc1 = new GridBagConstraints();
				componentgbc1.insets = new Insets(5, 0, 5, 5);
				componentgbc1.fill = GridBagConstraints.HORIZONTAL;
				componentgbc1.gridx = 4;
				componentgbc1.gridy = 1;
				add(manaPanel, componentgbc1);

				JLabel loyaltyLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LOYALTY")+" :");
				GridBagConstraints gbcloyaltyLabel = new GridBagConstraints();
				gbcloyaltyLabel.insets = new Insets(0, 0, 5, 5);
				gbcloyaltyLabel.gridx = 0;
				gbcloyaltyLabel.gridy = 2;
				add(loyaltyLabel, gbcloyaltyLabel);
				loyaltyJTextField = new JTextField();
				loyaltyJTextField.setColumns(5);
				JLabel powerLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_POWER")+" :");
				powerJTextField = new JTextField();
				powerJTextField.setColumns(5);
				JLabel toughnessLabel = new JLabel("/");
				toughnessJTextField = new JTextField();
				toughnessJTextField.setColumns(5);

				panelDetailCreature = new JPanel();
				FlowLayout flowLayout = (FlowLayout) panelDetailCreature.getLayout();
				flowLayout.setAlignment(FlowLayout.LEFT);
				GridBagConstraints gbcpanelDetailCreature = new GridBagConstraints();
				gbcpanelDetailCreature.gridwidth = 3;
				gbcpanelDetailCreature.insets = new Insets(0, 0, 5, 5);
				gbcpanelDetailCreature.fill = GridBagConstraints.BOTH;
				gbcpanelDetailCreature.gridx = 1;
				gbcpanelDetailCreature.gridy = 2;
				add(panelDetailCreature, gbcpanelDetailCreature);
				panelDetailCreature.add(loyaltyJTextField);
				panelDetailCreature.add(powerLabel);
				panelDetailCreature.add(powerJTextField);
				panelDetailCreature.add(toughnessLabel);
				panelDetailCreature.add(toughnessJTextField);

				lblnumberInSet = new JLabel("/");
				GridBagConstraints gbclblnumberInSet = new GridBagConstraints();
				gbclblnumberInSet.gridwidth = 2;
				gbclblnumberInSet.insets = new Insets(0, 0, 5, 5);
				gbclblnumberInSet.gridx = 5;
				gbclblnumberInSet.gridy = 2;
				add(lblnumberInSet, gbclblnumberInSet);

				lblLayout = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LAYOUT")+" :");
				GridBagConstraints gbclblLayout = new GridBagConstraints();
				gbclblLayout.insets = new Insets(0, 0, 5, 5);
				gbclblLayout.gridx = 0;
				gbclblLayout.gridy = 3;
				add(lblLayout, gbclblLayout);

				txtLayoutField = new JTextField();

				GridBagConstraints gbctxtLayoutField = new GridBagConstraints();
				gbctxtLayoutField.insets = new Insets(0, 0, 5, 5);
				gbctxtLayoutField.fill = GridBagConstraints.HORIZONTAL;
				gbctxtLayoutField.gridx = 1;
				gbctxtLayoutField.gridy = 3;
				add(txtLayoutField, gbctxtLayoutField);
				txtLayoutField.setColumns(10);
				GridBagConstraints gbclstFormats = new GridBagConstraints();
				gbclstFormats.gridwidth = 3;
				gbclstFormats.insets = new Insets(0, 0, 5, 5);
				gbclstFormats.fill = GridBagConstraints.HORIZONTAL;
				gbclstFormats.gridx = 4;
				gbclstFormats.gridy = 3;

				chckbxReserved = new JCheckBox("(R)");
				GridBagConstraints gbcchckbxReserved = new GridBagConstraints();
				gbcchckbxReserved.insets = new Insets(0, 0, 5, 5);
				gbcchckbxReserved.gridx = 2;
				gbcchckbxReserved.gridy = 3;
				add(chckbxReserved, gbcchckbxReserved);

				rarityJTextField = new JTextField();
				GridBagConstraints gbcrarityJTextField = new GridBagConstraints();
				gbcrarityJTextField.gridwidth = 3;
				gbcrarityJTextField.insets = new Insets(0, 0, 5, 5);
				gbcrarityJTextField.fill = GridBagConstraints.HORIZONTAL;
				gbcrarityJTextField.gridx = 3;
				gbcrarityJTextField.gridy = 3;
				add(rarityJTextField, gbcrarityJTextField);
				rarityJTextField.setColumns(10);

				lstFormats = new JList<>(new DefaultListModel<MagicFormat>());
				lstFormats.setVisibleRowCount(4);

				scrollLegality = new JScrollPane();
				GridBagConstraints gbcscrollLegality = new GridBagConstraints();
				gbcscrollLegality.gridheight = 2;
				gbcscrollLegality.gridwidth = 2;
				gbcscrollLegality.insets = new Insets(0, 0, 0, 5);
				gbcscrollLegality.fill = GridBagConstraints.BOTH;
				gbcscrollLegality.gridx = 1;
				gbcscrollLegality.gridy = 8;
				add(scrollLegality, gbcscrollLegality);
				scrollLegality.setViewportView(lstFormats);

				JLabel textLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_TEXT")+" :");
				GridBagConstraints labelgbc8 = new GridBagConstraints();
				labelgbc8.gridheight = 2;
				labelgbc8.insets = new Insets(5, 5, 5, 5);
				labelgbc8.gridx = 0;
				labelgbc8.gridy = 4;
				add(textLabel, labelgbc8);

				txtTextPane = new MagicTextPane();
				txtTextPane.setBorder(new LineBorder(Color.GRAY));
				txtTextPane.setBackground(Color.WHITE);

				txtTextPane.setFont(new Font("Arial", Font.PLAIN, 12));

				GridBagConstraints gbctxtTextPane = new GridBagConstraints();
				gbctxtTextPane.gridwidth = 6;
				gbctxtTextPane.gridheight = 2;
				gbctxtTextPane.insets = new Insets(5, 0, 5, 5);
				gbctxtTextPane.fill = GridBagConstraints.BOTH;
				gbctxtTextPane.gridx = 1;
				gbctxtTextPane.gridy = 4;
				add(txtTextPane, gbctxtTextPane);

				lblFlavor = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_FLAVOR")+" :");
				GridBagConstraints gbclblFlavor = new GridBagConstraints();
				gbclblFlavor.insets = new Insets(0, 0, 5, 5);
				gbclblFlavor.gridx = 0;
				gbclblFlavor.gridy = 6;
				add(lblFlavor, gbclblFlavor);

				txtFlavorArea = new JTextPane();
				txtFlavorArea.setFont(new Font("Arial", Font.ITALIC, 11));
				GridBagConstraints gbctxtFlavorArea = new GridBagConstraints();
				gbctxtFlavorArea.gridwidth = 6;
				gbctxtFlavorArea.insets = new Insets(0, 0, 5, 5);
				gbctxtFlavorArea.fill = GridBagConstraints.BOTH;
				gbctxtFlavorArea.gridx = 1;
				gbctxtFlavorArea.gridy = 6;
				add(txtFlavorArea, gbctxtFlavorArea);

				lblArtist = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_ARTIST")+" :");
				GridBagConstraints gbclblArtist = new GridBagConstraints();
				gbclblArtist.insets = new Insets(0, 0, 5, 5);
				gbclblArtist.gridx = 0;
				gbclblArtist.gridy = 7;
				add(lblArtist, gbclblArtist);

				txtArtist = new JTextField();
				GridBagConstraints gbctxtArtist = new GridBagConstraints();
				gbctxtArtist.insets = new Insets(0, 0, 5, 5);
				gbctxtArtist.fill = GridBagConstraints.HORIZONTAL;
				gbctxtArtist.gridx = 1;
				gbctxtArtist.gridy = 7;
				add(txtArtist, gbctxtArtist);
				txtArtist.setColumns(10);

				lblWatermark = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_WATERMARK")+" :");
				GridBagConstraints gbclblWatermark = new GridBagConstraints();
				gbclblWatermark.anchor = GridBagConstraints.EAST;
				gbclblWatermark.insets = new Insets(0, 0, 5, 5);
				gbclblWatermark.gridx = 2;
				gbclblWatermark.gridy = 7;
				add(lblWatermark, gbclblWatermark);

				txtWatermark = new JTextField();

				GridBagConstraints gbctxtWatermark = new GridBagConstraints();
				gbctxtWatermark.gridwidth = 3;
				gbctxtWatermark.insets = new Insets(0, 0, 5, 5);
				gbctxtWatermark.fill = GridBagConstraints.HORIZONTAL;
				gbctxtWatermark.gridx = 4;
				gbctxtWatermark.gridy = 7;
				add(txtWatermark, gbctxtWatermark);
				txtWatermark.setColumns(10);

				lblLegal = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LEGALITIES")+" :");
				GridBagConstraints gbclblLegal = new GridBagConstraints();
				gbclblLegal.insets = new Insets(0, 0, 5, 5);
				gbclblLegal.gridx = 0;
				gbclblLegal.gridy = 8;
				add(lblLegal, gbclblLegal);

				scrollCollections = new JScrollPane();
				GridBagConstraints gbcscrollCollections = new GridBagConstraints();
				gbcscrollCollections.gridheight = 2;
				gbcscrollCollections.gridwidth = 3;
				gbcscrollCollections.insets = new Insets(0, 0, 0, 5);
				gbcscrollCollections.fill = GridBagConstraints.BOTH;
				gbcscrollCollections.gridx = 4;
				gbcscrollCollections.gridy = 8;
				add(scrollCollections, gbcscrollCollections);

				listCollection = new JList<>(new DefaultListModel<MagicCollection>());
				scrollCollections.setViewportView(listCollection);

		if (magicCard != null) {
			mBindingGroup = initDataBindings();
		}

		setEditable(false);

	}

	public MagicCardDetailPanel() {

		gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 52, 382, 76, 0, 57, 32, 51, 0, 77, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0, 44, 0, 65, 25, 21, 0, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4 };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0E-4 };
		setLayout(gridBagLayout);

		JLabel nameLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("NAME") +" :");
		GridBagConstraints labelgbc5 = new GridBagConstraints();
		labelgbc5.insets = new Insets(5, 5, 5, 5);
		labelgbc5.gridx = 0;
		labelgbc5.gridy = 0;
		add(nameLabel, labelgbc5);

		nameJTextField = new JTextField();

		GridBagConstraints componentgbc5 = new GridBagConstraints();
		componentgbc5.insets = new Insets(5, 0, 5, 5);
		componentgbc5.fill = GridBagConstraints.HORIZONTAL;
		componentgbc5.gridx = 1;
		componentgbc5.gridy = 0;
		add(nameJTextField, componentgbc5);

		JLabel cmcLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_COST")+" :");
		GridBagConstraints labelgbc0 = new GridBagConstraints();
		labelgbc0.anchor = GridBagConstraints.EAST;
		labelgbc0.insets = new Insets(5, 5, 5, 5);
		labelgbc0.gridx = 2;
		labelgbc0.gridy = 0;
		add(cmcLabel, labelgbc0);

		cmcJTextField = new JTextField();
		GridBagConstraints componentgbc0 = new GridBagConstraints();
		componentgbc0.insets = new Insets(5, 0, 5, 5);
		componentgbc0.fill = GridBagConstraints.HORIZONTAL;
		componentgbc0.gridx = 4;
		componentgbc0.gridy = 0;
		add(cmcJTextField, componentgbc0);

				lblLogoSet = new JLabel("");
				GridBagConstraints gbclblLogoSet = new GridBagConstraints();
				gbclblLogoSet.gridwidth = 2;
				gbclblLogoSet.gridheight = 2;
				gbclblLogoSet.insets = new Insets(0, 0, 5, 5);
				gbclblLogoSet.gridx = 5;
				gbclblLogoSet.gridy = 0;
				add(lblLogoSet, gbclblLogoSet);

				btnAlert = new JButton("");
				btnAlert.setEnabled(false);
				Image b = MTGConstants.ICON_ALERT.getImage().getScaledInstance(16, 16, BufferedImage.SCALE_SMOOTH);
				btnAlert.setIcon(new ImageIcon(b));
				btnAlert.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {

						MagicCardAlert alert = new MagicCardAlert();
						alert.setCard(magicCard);
						String price = JOptionPane.showInputDialog(null,MTGControler.getInstance().getLangService().getCapitalize("SELECT_MAXIMUM_PRICE"), MTGControler.getInstance().getLangService().getCapitalize("ADD_ALERT_FOR",magicCard) , JOptionPane.QUESTION_MESSAGE);
						alert.setPrice(Double.parseDouble(price));

						try {
							MTGControler.getInstance().getEnabledDAO().saveAlert(alert);
						} catch (Exception e) {
							MTGLogger.printStackTrace(e);
							JOptionPane.showMessageDialog(null, e,MTGControler.getInstance().getLangService().getCapitalize("ERROR"),JOptionPane.ERROR_MESSAGE);
						}
					}
				});

				GridBagConstraints gbcbtnAlert = new GridBagConstraints();
				gbcbtnAlert.insets = new Insets(0, 0, 5, 0);
				gbcbtnAlert.gridx = 8;
				gbcbtnAlert.gridy = 0;
				add(btnAlert, gbcbtnAlert);

				lblThumbnail = new JLabel("");
				GridBagConstraints gbclblThumbnail = new GridBagConstraints();
				gbclblThumbnail.fill = GridBagConstraints.HORIZONTAL;
				gbclblThumbnail.gridwidth = 2;
				gbclblThumbnail.gridheight = 9;
				gbclblThumbnail.gridx = 7;
				gbclblThumbnail.gridy = 1;
				add(lblThumbnail, gbclblThumbnail);

				JLabel fullTypeLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_TYPES")+" :");
				GridBagConstraints labelgbc2 = new GridBagConstraints();
				labelgbc2.insets = new Insets(5, 5, 5, 5);
				labelgbc2.gridx = 0;
				labelgbc2.gridy = 1;
				add(fullTypeLabel, labelgbc2);

				fullTypeJTextField = new JTextField();
				GridBagConstraints componentgbc2 = new GridBagConstraints();
				componentgbc2.insets = new Insets(5, 0, 5, 5);
				componentgbc2.fill = GridBagConstraints.HORIZONTAL;
				componentgbc2.gridx = 1;
				componentgbc2.gridy = 1;
				add(fullTypeJTextField, componentgbc2);

				JLabel costLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_MANA")+" :");
				GridBagConstraints labelgbc1 = new GridBagConstraints();
				labelgbc1.anchor = GridBagConstraints.EAST;
				labelgbc1.insets = new Insets(5, 5, 5, 5);
				labelgbc1.gridx = 2;
				labelgbc1.gridy = 1;
				add(costLabel, labelgbc1);

				manaPanel = new ManaPanel();
				//costJTextField.setEditable(false);
				GridBagConstraints componentgbc1 = new GridBagConstraints();
				componentgbc1.insets = new Insets(5, 0, 5, 5);
				componentgbc1.fill = GridBagConstraints.HORIZONTAL;
				componentgbc1.gridx = 4;
				componentgbc1.gridy = 1;
				add(manaPanel, componentgbc1);

				JLabel loyaltyLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LOYALTY")+" :");
				GridBagConstraints gbcloyaltyLabel = new GridBagConstraints();
				gbcloyaltyLabel.insets = new Insets(0, 0, 5, 5);
				gbcloyaltyLabel.gridx = 0;
				gbcloyaltyLabel.gridy = 2;
				add(loyaltyLabel, gbcloyaltyLabel);
				loyaltyJTextField = new JTextField();
				loyaltyJTextField.setColumns(5);
				JLabel powerLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_POWER")+" :");
				powerJTextField = new JTextField();
				powerJTextField.setColumns(5);
				JLabel toughnessLabel = new JLabel("/");
				toughnessJTextField = new JTextField();
				toughnessJTextField.setColumns(5);

				panelDetailCreature = new JPanel();
				FlowLayout flowLayout = (FlowLayout) panelDetailCreature.getLayout();
				flowLayout.setAlignment(FlowLayout.LEFT);
				GridBagConstraints gbcpanelDetailCreature = new GridBagConstraints();
				gbcpanelDetailCreature.gridwidth = 3;
				gbcpanelDetailCreature.insets = new Insets(0, 0, 5, 5);
				gbcpanelDetailCreature.fill = GridBagConstraints.BOTH;
				gbcpanelDetailCreature.gridx = 1;
				gbcpanelDetailCreature.gridy = 2;
				add(panelDetailCreature, gbcpanelDetailCreature);
				panelDetailCreature.add(loyaltyJTextField);
				panelDetailCreature.add(powerLabel);
				panelDetailCreature.add(powerJTextField);
				panelDetailCreature.add(toughnessLabel);
				panelDetailCreature.add(toughnessJTextField);

				lblnumberInSet = new JLabel("/");
				GridBagConstraints gbclblnumberInSet = new GridBagConstraints();
				gbclblnumberInSet.gridwidth = 2;
				gbclblnumberInSet.insets = new Insets(0, 0, 5, 5);
				gbclblnumberInSet.gridx = 5;
				gbclblnumberInSet.gridy = 2;
				add(lblnumberInSet, gbclblnumberInSet);

				lblLayout = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LAYOUT")+" :");
				GridBagConstraints gbclblLayout = new GridBagConstraints();
				gbclblLayout.insets = new Insets(0, 0, 5, 5);
				gbclblLayout.gridx = 0;
				gbclblLayout.gridy = 3;
				add(lblLayout, gbclblLayout);

				txtLayoutField = new JTextField();

				GridBagConstraints gbctxtLayoutField = new GridBagConstraints();
				gbctxtLayoutField.insets = new Insets(0, 0, 5, 5);
				gbctxtLayoutField.fill = GridBagConstraints.HORIZONTAL;
				gbctxtLayoutField.gridx = 1;
				gbctxtLayoutField.gridy = 3;
				add(txtLayoutField, gbctxtLayoutField);
				txtLayoutField.setColumns(10);
				GridBagConstraints gbclstFormats = new GridBagConstraints();
				gbclstFormats.gridwidth = 3;
				gbclstFormats.insets = new Insets(0, 0, 5, 5);
				gbclstFormats.fill = GridBagConstraints.HORIZONTAL;
				gbclstFormats.gridx = 4;
				gbclstFormats.gridy = 3;

				chckbxReserved = new JCheckBox("(R)");
				GridBagConstraints gbcchckbxReserved = new GridBagConstraints();
				gbcchckbxReserved.insets = new Insets(0, 0, 5, 5);
				gbcchckbxReserved.gridx = 2;
				gbcchckbxReserved.gridy = 3;
				add(chckbxReserved, gbcchckbxReserved);

				rarityJTextField = new JTextField();
				GridBagConstraints gbcrarityJTextField = new GridBagConstraints();
				gbcrarityJTextField.gridwidth = 3;
				gbcrarityJTextField.insets = new Insets(0, 0, 5, 5);
				gbcrarityJTextField.fill = GridBagConstraints.HORIZONTAL;
				gbcrarityJTextField.gridx = 3;
				gbcrarityJTextField.gridy = 3;
				add(rarityJTextField, gbcrarityJTextField);
				rarityJTextField.setColumns(10);

				lstFormats = new JList<>(new DefaultListModel<MagicFormat>());
				lstFormats.setVisibleRowCount(4);

				scrollLegality = new JScrollPane();
				GridBagConstraints gbcscrollLegality = new GridBagConstraints();
				gbcscrollLegality.gridheight = 2;
				gbcscrollLegality.gridwidth = 2;
				gbcscrollLegality.insets = new Insets(0, 0, 0, 5);
				gbcscrollLegality.fill = GridBagConstraints.BOTH;
				gbcscrollLegality.gridx = 1;
				gbcscrollLegality.gridy = 8;
				add(scrollLegality, gbcscrollLegality);
				scrollLegality.setViewportView(lstFormats);

				JLabel textLabel = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_TEXT")+" :");
				GridBagConstraints labelgbc8 = new GridBagConstraints();
				labelgbc8.gridheight = 2;
				labelgbc8.insets = new Insets(5, 5, 5, 5);
				labelgbc8.gridx = 0;
				labelgbc8.gridy = 4;
				add(textLabel, labelgbc8);

				txtTextPane = new MagicTextPane();
				txtTextPane.setBorder(new LineBorder(Color.GRAY));
				txtTextPane.setBackground(Color.WHITE);

				txtTextPane.setFont(new Font("Arial", Font.PLAIN, 12));

				GridBagConstraints gbctxtTextPane = new GridBagConstraints();
				gbctxtTextPane.gridwidth = 6;
				gbctxtTextPane.gridheight = 2;
				gbctxtTextPane.insets = new Insets(5, 0, 5, 5);
				gbctxtTextPane.fill = GridBagConstraints.BOTH;
				gbctxtTextPane.gridx = 1;
				gbctxtTextPane.gridy = 4;
				add(txtTextPane, gbctxtTextPane);

				lblFlavor = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_FLAVOR")+" :");
				GridBagConstraints gbclblFlavor = new GridBagConstraints();
				gbclblFlavor.insets = new Insets(0, 0, 5, 5);
				gbclblFlavor.gridx = 0;
				gbclblFlavor.gridy = 6;
				add(lblFlavor, gbclblFlavor);

				txtFlavorArea = new JTextPane();
			//	txtFlavorArea.setLineWrap(true);
			//	txtFlavorArea.setWrapStyleWord(true);
				txtFlavorArea.setFont(new Font("Arial", Font.ITALIC, 11));
				GridBagConstraints gbctxtFlavorArea = new GridBagConstraints();
				gbctxtFlavorArea.gridwidth = 6;
				gbctxtFlavorArea.insets = new Insets(0, 0, 5, 5);
				gbctxtFlavorArea.fill = GridBagConstraints.BOTH;
				gbctxtFlavorArea.gridx = 1;
				gbctxtFlavorArea.gridy = 6;
				add(txtFlavorArea, gbctxtFlavorArea);

				lblArtist = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_ARTIST")+" :");
				GridBagConstraints gbclblArtist = new GridBagConstraints();
				gbclblArtist.insets = new Insets(0, 0, 5, 5);
				gbclblArtist.gridx = 0;
				gbclblArtist.gridy = 7;
				add(lblArtist, gbclblArtist);

				txtArtist = new JTextField();
				GridBagConstraints gbctxtArtist = new GridBagConstraints();
				gbctxtArtist.insets = new Insets(0, 0, 5, 5);
				gbctxtArtist.fill = GridBagConstraints.HORIZONTAL;
				gbctxtArtist.gridx = 1;
				gbctxtArtist.gridy = 7;
				add(txtArtist, gbctxtArtist);
				txtArtist.setColumns(10);

				lblWatermark = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_WATERMARK")+" :");
				GridBagConstraints gbclblWatermark = new GridBagConstraints();
				gbclblWatermark.anchor = GridBagConstraints.EAST;
				gbclblWatermark.insets = new Insets(0, 0, 5, 5);
				gbclblWatermark.gridx = 2;
				gbclblWatermark.gridy = 7;
				add(lblWatermark, gbclblWatermark);

				txtWatermark = new JTextField();

				GridBagConstraints gbctxtWatermark = new GridBagConstraints();
				gbctxtWatermark.gridwidth = 3;
				gbctxtWatermark.insets = new Insets(0, 0, 5, 5);
				gbctxtWatermark.fill = GridBagConstraints.HORIZONTAL;
				gbctxtWatermark.gridx = 4;
				gbctxtWatermark.gridy = 7;
				add(txtWatermark, gbctxtWatermark);
				txtWatermark.setColumns(10);

				lblLegal = new JLabel(MTGControler.getInstance().getLangService().getCapitalize("CARD_LEGALITIES")+" :");
				GridBagConstraints gbclblLegal = new GridBagConstraints();
				gbclblLegal.insets = new Insets(0, 0, 5, 5);
				gbclblLegal.gridx = 0;
				gbclblLegal.gridy = 8;
				add(lblLegal, gbclblLegal);

				scrollCollections = new JScrollPane();
				GridBagConstraints gbcscrollCollections = new GridBagConstraints();
				gbcscrollCollections.gridheight = 2;
				gbcscrollCollections.gridwidth = 3;
				gbcscrollCollections.insets = new Insets(0, 0, 0, 5);
				gbcscrollCollections.fill = GridBagConstraints.BOTH;
				gbcscrollCollections.gridx = 4;
				gbcscrollCollections.gridy = 8;
				add(scrollCollections, gbcscrollCollections);

				listCollection = new JList<>(new DefaultListModel<MagicCollection>());
				scrollCollections.setViewportView(listCollection);

		if (magicCard != null) {
			mBindingGroup = initDataBindings();
		}

		setEditable(false);

	}

Replace Anonymous With Lambda org.magic.gui.components.MagicCardDetailPanel.MagicCardDetailPanel.addActionListener.new ActionListener with ae -> {MagicCardAlert alert=new MagicCardAlert(); in method public MagicCardDetailPanel() from class org.magic.gui.components.MagicCardDetailPanel


	public void setMagicLogo(final String set,final String rarity) {
		ThreadManager.getInstance().execute(()->{
				try {
					lblLogoSet.setIcon(new ImageIcon(MTGControler.getInstance().getEnabledPicturesProvider().getSetLogo(set, rarity)));
				} catch (Exception e) {
					lblLogoSet.setIcon(null);
					}
		}, "retrieve logo " + set + " " + rarity);

	}

	public void setMagicLogo(final String set,final String rarity) {
		ThreadManager.getInstance().execute(new Runnable() {

			@Override
			public void run() {
				try {
					lblLogoSet.setIcon(new ImageIcon(MTGControler.getInstance().getEnabledPicturesProvider().getSetLogo(set, rarity)));
				} catch (Exception e) {
					lblLogoSet.setIcon(null);
					}

			}
		}, "retrieve logo " + set + " " + rarity);

	}

Replace Anonymous With Lambda org.magic.gui.components.MagicCardDetailPanel.setMagicLogo.execute.new Runnable with () -> {trylblLogoSet.setIcon(new ImageIcon(MTGControler.getInstance().getEnabledPicturesProvider().getSetLogo(set,rarity))); in method public setMagicLogo(set String, rarity String) : void from class org.magic.gui.components.MagicCardDetailPanel


	protected BindingGroup initDataBindings() {
		BeanProperty<MagicCard, Integer> cmcProperty = BeanProperty.create("cmc");
		BeanProperty<JTextField, String> textProperty = BeanProperty.create("text");
		AutoBinding<MagicCard, Integer, JTextField, String> autoBinding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, cmcProperty, cmcJTextField, textProperty);
		autoBinding.bind();
		//
		BeanProperty<MagicCard, String> costProperty = BeanProperty.create("cost");
		BeanProperty<ManaPanel, String> textProperty1 = BeanProperty.create("manaCost");
		AutoBinding<MagicCard, String, ManaPanel, String> autoBinding1 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, costProperty, manaPanel, textProperty1);
		autoBinding1.bind();
		//
		BeanProperty<MagicCard, String> fullTypeProperty = BeanProperty.create("fullType");
		BeanProperty<JTextField, String> textProperty2 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding2 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, fullTypeProperty, fullTypeJTextField, textProperty2);
		autoBinding2.bind();
		//
		BeanProperty<MagicCard, Integer> loyaltyProperty = BeanProperty.create("loyalty");
		BeanProperty<JTextField, String> textProperty4 = BeanProperty.create("text");
		AutoBinding<MagicCard, Integer, JTextField, String> autoBinding4 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, loyaltyProperty, loyaltyJTextField, textProperty4);
		autoBinding4.bind();
		//
		BeanProperty<MagicCard, String> nameProperty = BeanProperty.create("name");
		BeanProperty<JTextField, String> textProperty5 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding5 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, nameProperty, nameJTextField, textProperty5);
		autoBinding5.bind();
		//
		BeanProperty<MagicCard, String> powerProperty = BeanProperty.create("power");
		BeanProperty<JTextField, String> textProperty6 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding6 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, powerProperty, powerJTextField, textProperty6);
		autoBinding6.bind();
		//
		BeanProperty<MagicCard, String> textProperty8 = BeanProperty.create("text");
		BeanProperty<MagicTextPane, String> textProperty9 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, MagicTextPane, String> autoBinding8 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, textProperty8, txtTextPane, textProperty9);
		autoBinding8.bind();
		//
		BeanProperty<MagicCard, String> toughnessProperty = BeanProperty.create("toughness");
		BeanProperty<JTextField, String> textProperty10 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding9 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, toughnessProperty, toughnessJTextField, textProperty10);
		autoBinding9.bind();

		BeanProperty<MagicCard, String> flavorProperty = BeanProperty.create("flavor");
		BeanProperty<JTextPane, String> textProperty11 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextPane, String> autoBinding10 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, flavorProperty, txtFlavorArea, textProperty11);
		autoBinding10.bind();

		BeanProperty<MagicCard, String> artistProperty = BeanProperty.create("artist");
		BeanProperty<JTextField, String> textProperty12 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding11 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, artistProperty, txtArtist, textProperty12);
		autoBinding11.bind();

		BeanProperty<MagicCard, String> layoutProperty = BeanProperty.create("layout");
		BeanProperty<JTextField, String> textProperty13 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding12 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, layoutProperty, txtLayoutField, textProperty13);
		autoBinding12.bind();

		BeanProperty<MagicCard, String> waterProperty = BeanProperty.create("watermarks");
		BeanProperty<JTextField, String> textProperty14 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding13 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, waterProperty, txtWatermark, textProperty14);
		autoBinding13.bind();

		BeanProperty<MagicCard, Boolean> reservedProperty = BeanProperty.create("reserved");
		BeanProperty<JCheckBox, Boolean> chkProperty_15 = BeanProperty.create("selected");
		AutoBinding<MagicCard, Boolean, JCheckBox, Boolean> autoBinding15 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, reservedProperty, chckbxReserved, chkProperty_15);
		autoBinding15.bind();

		try{
			if(magicCard!=null)
				rarityJTextField.setText(magicCard.getEditions().get(0).getRarity());
		}
		catch(Exception e)
			{
				rarityJTextField.setText("");
			}

		txtTextPane.updateTextWithIcons();

		if(thumbnail)
		{
			if(magicCard!=null)
				ThreadManager.getInstance().execute(new Runnable() {
					public void run() {
						loadPics();

					}
				},"load pic");
		}

		if(magicCard!=null && !magicCard.getEditions().isEmpty())
			{

				ThreadManager.getInstance().execute(()->{
							setMagicLogo(magicCard.getEditions().get(0).getId(),magicCard.getEditions().get(0).getRarity());
							lblnumberInSet.setText(magicCard.getEditions().get(0).getNumber()+"/"+magicCard.getEditions().get(0).getCardCount());
				},"loadLogo");
			}

		if(magicCard!=null)
			ThreadManager.getInstance().execute(()->{
					try{
						((DefaultListModel)listCollection.getModel()).removeAllElements();
						for(MagicCollection col : MTGControler.getInstance().getEnabledDAO().getCollectionFromCards(magicCard))
							((DefaultListModel)listCollection.getModel()).addElement(col);
					}
					catch(Exception e)
					{
						logger.error(e);
					}
			},"loadCollections");

		if(magicCard!=null)
		ThreadManager.getInstance().execute(()->{
					if(MTGControler.getInstance().getEnabledDAO().hasAlert(magicCard))
					{
						btnAlert.setToolTipText(MTGControler.getInstance().getLangService().getCapitalize("HAD_ALERT"));
						btnAlert.setEnabled(false);
					}
					else
					{
						btnAlert.setToolTipText(MTGControler.getInstance().getLangService().getCapitalize("ADD_ALERT_FOR",magicCard.getName()));
						btnAlert.setEnabled(true);
					}
		},"Get alerts for " + magicCard);

		((DefaultListModel)lstFormats.getModel()).removeAllElements();

		if(magicCard!=null)
		for(MagicFormat mf : magicCard.getLegalities())
			((DefaultListModel)lstFormats.getModel()).addElement(mf);

		//
		BindingGroup bindingGroup = new BindingGroup();
		//
		bindingGroup.addBinding(autoBinding);
		bindingGroup.addBinding(autoBinding1);
		bindingGroup.addBinding(autoBinding2);
		bindingGroup.addBinding(autoBinding4);
		bindingGroup.addBinding(autoBinding5);
		bindingGroup.addBinding(autoBinding6);
		bindingGroup.addBinding(autoBinding8);
		bindingGroup.addBinding(autoBinding9);
		bindingGroup.addBinding(autoBinding10);
		bindingGroup.addBinding(autoBinding11);
		bindingGroup.addBinding(autoBinding12);
		bindingGroup.addBinding(autoBinding13);
		bindingGroup.addBinding(autoBinding15);
		return bindingGroup;
	}

	protected BindingGroup initDataBindings() {
		BeanProperty<MagicCard, Integer> cmcProperty = BeanProperty.create("cmc");
		BeanProperty<JTextField, String> textProperty = BeanProperty.create("text");
		AutoBinding<MagicCard, Integer, JTextField, String> autoBinding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, cmcProperty, cmcJTextField, textProperty);
		autoBinding.bind();
		//
		BeanProperty<MagicCard, String> costProperty = BeanProperty.create("cost");
		BeanProperty<ManaPanel, String> textProperty1 = BeanProperty.create("manaCost");
		AutoBinding<MagicCard, String, ManaPanel, String> autoBinding1 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, costProperty, manaPanel, textProperty1);
		autoBinding1.bind();
		//
		BeanProperty<MagicCard, String> fullTypeProperty = BeanProperty.create("fullType");
		BeanProperty<JTextField, String> textProperty2 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding2 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, fullTypeProperty, fullTypeJTextField, textProperty2);
		autoBinding2.bind();
		//
		BeanProperty<MagicCard, Integer> loyaltyProperty = BeanProperty.create("loyalty");
		BeanProperty<JTextField, String> textProperty4 = BeanProperty.create("text");
		AutoBinding<MagicCard, Integer, JTextField, String> autoBinding4 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, loyaltyProperty, loyaltyJTextField, textProperty4);
		autoBinding4.bind();
		//
		BeanProperty<MagicCard, String> nameProperty = BeanProperty.create("name");
		BeanProperty<JTextField, String> textProperty5 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding5 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, nameProperty, nameJTextField, textProperty5);
		autoBinding5.bind();
		//
		BeanProperty<MagicCard, String> powerProperty = BeanProperty.create("power");
		BeanProperty<JTextField, String> textProperty6 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding6 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, powerProperty, powerJTextField, textProperty6);
		autoBinding6.bind();
		//
		BeanProperty<MagicCard, String> textProperty8 = BeanProperty.create("text");
		BeanProperty<MagicTextPane, String> textProperty9 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, MagicTextPane, String> autoBinding8 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, textProperty8, txtTextPane, textProperty9);
		autoBinding8.bind();
		//
		BeanProperty<MagicCard, String> toughnessProperty = BeanProperty.create("toughness");
		BeanProperty<JTextField, String> textProperty10 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding9 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, toughnessProperty, toughnessJTextField, textProperty10);
		autoBinding9.bind();

		BeanProperty<MagicCard, String> flavorProperty = BeanProperty.create("flavor");
		BeanProperty<JTextPane, String> textProperty11 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextPane, String> autoBinding10 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, flavorProperty, txtFlavorArea, textProperty11);
		autoBinding10.bind();

		BeanProperty<MagicCard, String> artistProperty = BeanProperty.create("artist");
		BeanProperty<JTextField, String> textProperty12 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding11 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, artistProperty, txtArtist, textProperty12);
		autoBinding11.bind();

		BeanProperty<MagicCard, String> layoutProperty = BeanProperty.create("layout");
		BeanProperty<JTextField, String> textProperty13 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding12 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, layoutProperty, txtLayoutField, textProperty13);
		autoBinding12.bind();

		BeanProperty<MagicCard, String> waterProperty = BeanProperty.create("watermarks");
		BeanProperty<JTextField, String> textProperty14 = BeanProperty.create("text");
		AutoBinding<MagicCard, String, JTextField, String> autoBinding13 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, waterProperty, txtWatermark, textProperty14);
		autoBinding13.bind();

		BeanProperty<MagicCard, Boolean> reservedProperty = BeanProperty.create("reserved");
		BeanProperty<JCheckBox, Boolean> chkProperty_15 = BeanProperty.create("selected");
		AutoBinding<MagicCard, Boolean, JCheckBox, Boolean> autoBinding15 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, magicCard, reservedProperty, chckbxReserved, chkProperty_15);
		autoBinding15.bind();

		try{
			if(magicCard!=null)
				rarityJTextField.setText(magicCard.getEditions().get(0).getRarity());
		}
		catch(Exception e)
			{
				rarityJTextField.setText("");
			}

		txtTextPane.updateTextWithIcons();

		if(thumbnail)
		{
			if(magicCard!=null)
				ThreadManager.getInstance().execute(new Runnable() {
					public void run() {
						loadPics();

					}
				},"load pic");
		}

		if(magicCard!=null)
			if(!magicCard.getEditions().isEmpty())
			{

				ThreadManager.getInstance().execute(new Runnable() {
					public void run() {
							setMagicLogo(magicCard.getEditions().get(0).getId(),magicCard.getEditions().get(0).getRarity());
							lblnumberInSet.setText(magicCard.getEditions().get(0).getNumber()+"/"+magicCard.getEditions().get(0).getCardCount());
					}
				},"loadLogo");
			}

		if(magicCard!=null)
		ThreadManager.getInstance().execute(new Runnable() {
			public void run() {
				try{
					((DefaultListModel)listCollection.getModel()).removeAllElements();
					for(MagicCollection col : MTGControler.getInstance().getEnabledDAO().getCollectionFromCards(magicCard))
						((DefaultListModel)listCollection.getModel()).addElement(col);
				}
				catch(Exception e)
				{
					//logger.error(e);
				}
			}
		},"loadCollections");

		if(magicCard!=null)
		ThreadManager.getInstance().execute(new Runnable() {
			public void run() {
					if(MTGControler.getInstance().getEnabledDAO().hasAlert(magicCard))
					{
						btnAlert.setToolTipText(MTGControler.getInstance().getLangService().getCapitalize("HAD_ALERT"));
						btnAlert.setEnabled(false);
					}
					else
					{
						btnAlert.setToolTipText(MTGControler.getInstance().getLangService().getCapitalize("ADD_ALERT_FOR",magicCard.getName()));
						btnAlert.setEnabled(true);
					}
			}
		},"Get alerts for " + magicCard);

		((DefaultListModel)lstFormats.getModel()).removeAllElements();

		if(magicCard!=null)
		for(MagicFormat mf : magicCard.getLegalities())
			((DefaultListModel)lstFormats.getModel()).addElement(mf);

		//
		BindingGroup bindingGroup = new BindingGroup();
		//
		bindingGroup.addBinding(autoBinding);
		bindingGroup.addBinding(autoBinding1);
		bindingGroup.addBinding(autoBinding2);
		bindingGroup.addBinding(autoBinding4);
		bindingGroup.addBinding(autoBinding5);
		bindingGroup.addBinding(autoBinding6);
		bindingGroup.addBinding(autoBinding8);
		bindingGroup.addBinding(autoBinding9);
		bindingGroup.addBinding(autoBinding10);
		bindingGroup.addBinding(autoBinding11);
		bindingGroup.addBinding(autoBinding12);
		bindingGroup.addBinding(autoBinding13);
		bindingGroup.addBinding(autoBinding15);
		return bindingGroup;
	}

Replace Anonymous With Lambda org.magic.gui.components.MagicCardDetailPanel.initDataBindings.execute.new Runnable with () -> {try((DefaultListModel)listCollection.getModel()).removeAllElements(); in method protected initDataBindings() : BindingGroup from class org.magic.gui.components.MagicCardDetailPanel