package diploma;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.sql.*; 
import java.util.*;
import java.io.*;

public class InterfataGrafica extends JFrame implements ActionListener,
	ListSelectionListener{
	private String userString, passwString;
	String numeBdString;
	JLabel infoLabel;	//eticheta cu info. despre bd activă
	JButton showDbButton, useDbButton, deleteDbButton, createTabButton,
		describeTabButton, alterTabButton, selectButton, showTabButton,
		updateTabButton, deleteRecButton, deleteTabButton;
	JList intGrafList;
	DefaultListModel dlm;	//modelul pentru intGrafList
	Connection conex = null;		//conexiune la o bd
	//conexiune la bd mysql, pt. tabelul db, pt. a putea lista bd ale user-ului:
	Connection conexMysql = null;	
	Statement s_ment = null;		//statement MySQL
	
	//Clasa cu dialogul de început: user, parolă
	class DateInit extends JDialog implements ActionListener {
		private JTextField userTxField, bdTxField;
		private JPasswordField passwField;
		
		public DateInit(InterfataGrafica interfataGrafica, boolean modala) {
			super(interfataGrafica, "Culegere date inițiale", modala);
			//panelul cu user :
			JPanel userPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
			userPanel.setOpaque(true);
			JLabel userLabel = new JLabel("Utilizator:       ", JLabel.LEFT);
			userTxField = new JTextField();
			userTxField.setPreferredSize(new Dimension(120, 22));
			userLabel.setLabelFor(userTxField);
			userLabel.setDisplayedMnemonic(KeyEvent.VK_U);
			userLabel.setAlignmentX(0f);
			userPanel.add(userLabel);
			userPanel.add(userTxField);
			//panelul cu parola:
			JPanel passwPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
			passwPanel.setOpaque(true);
			//passwPanel.setAlignmentX(0f);
			JLabel passwLabel = new JLabel("Parola:           ", JLabel.LEFT);
			passwField = new JPasswordField();
			passwField.setPreferredSize(new Dimension(120, 22));
			passwLabel.setLabelFor(passwField);
			passwLabel.setDisplayedMnemonic(KeyEvent.VK_P);
			passwLabel.setAlignmentX(0f);
			passwPanel.add(passwLabel);
			passwPanel.add(passwField);
			//butonul ok:
			JPanel okPanel = new JPanel();
			okPanel.setOpaque(true);
			JButton okButton = new JButton("Înregistrează");
			okButton.setMnemonic(KeyEvent.VK_N);
			okButton.setAlignmentX(0.5f);
			okButton.addActionListener(this);
			okPanel.add(okButton);
			//Panelul ce cuprinde totul:
			JPanel diagPanel = new JPanel();	
			diagPanel.setLayout(new BoxLayout(diagPanel, BoxLayout.Y_AXIS));
			diagPanel.setOpaque(true);
			diagPanel.add(userPanel);
			diagPanel.add(passwPanel);
			diagPanel.add(Box.createVerticalStrut(30));
			diagPanel.add(okPanel);
			diagPanel.setBorder(BorderFactory.createEmptyBorder(30, 20, 20, 30)); 
			setContentPane(diagPanel);
		}
		
		public void actionPerformed(ActionEvent e) {
			userString = userTxField.getText();
			passwString = new String(passwField.getPassword());
			dispose();
			showDbButton.doClick();	//pt. a lista bd la care are acces 
		}
	}
	
	public InterfataGrafica() {
		super("Interfață grafică la comenzi MySQL");
		
		//Primul panel, cu eticheta
		JPanel labelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 20));
		infoLabel = new JLabel();
		infoLabel.setForeground(Color.magenta);
		Font fontMare = infoLabel.getFont().deriveFont(Font.BOLD, 14);
		infoLabel.setFont(fontMare);
		labelPanel.add(infoLabel);
		//Panelul cu lista și butoane
		JPanel listButPanel = new JPanel();	
		listButPanel.setLayout(new BoxLayout(listButPanel, BoxLayout.X_AXIS));
		listButPanel.setOpaque(true);
		//Lista cu baze de date și tabele:
		dlm = new DefaultListModel();		
		intGrafList = new JList(dlm);
		intGrafList.setVisibleRowCount(-1);
		intGrafList.setToolTipText("Lista cu baze da date și tabele");
		intGrafList.addListSelectionListener(this);
		intGrafList.getSelectionModel().setSelectionMode(
			ListSelectionModel.SINGLE_SELECTION);
		JScrollPane intGrafScPane = new JScrollPane(intGrafList);
		intGrafScPane.setPreferredSize(new Dimension(250, 420));
		intGrafScPane.setMaximumSize(new Dimension(300, 500));
		//Panelul cu butoane:
		JPanel butoanePanel = new JPanel();	
		butoanePanel.setLayout(new GridLayout(10, 1, 10, 10));
		butoanePanel.setOpaque(true);
		Dimension butDim = new Dimension(180, 30);	//dimens. butoanelor
		//Urmează butoanele de comandă:
		showDbButton = new JButton("Listează bazele de date");
		showDbButton.setMnemonic(KeyEvent.VK_L);
		showDbButton.setToolTipText("Listează bazele de date la " +
			"care are acces utilizatorul");
		showDbButton.setPreferredSize(butDim);
		showDbButton.addActionListener(this);
		useDbButton = new JButton("Baza de date activă");
		useDbButton.setMnemonic(KeyEvent.VK_A);
		useDbButton.setToolTipText("Setează ca activă baza de date " +
			"selectată în listă");
		useDbButton.setPreferredSize(butDim);
		useDbButton.addActionListener(this);
		deleteDbButton = new JButton("Șterge baza de date");
		deleteDbButton.setMnemonic(KeyEvent.VK_T);
		deleteDbButton.setToolTipText("Șterge baza de date selectată în listă");
		deleteDbButton.setPreferredSize(butDim);
		deleteDbButton.setVisible(false);
		deleteDbButton.addActionListener(this);
		createTabButton = new JButton("Creează tabel nou");
		createTabButton.setMnemonic(KeyEvent.VK_C);
		createTabButton.setToolTipText("Creează un nou tabel");
		createTabButton.setPreferredSize(butDim);
		createTabButton.addActionListener(this);
		describeTabButton = new JButton("Vizualizare structură");
		describeTabButton.setMnemonic(KeyEvent.VK_R);
		describeTabButton.setToolTipText("Vizualizare structură tabel cu " +
			"salvarea ei locală în aplicație");
		describeTabButton.setPreferredSize(butDim);
		describeTabButton.addActionListener(this);
		alterTabButton = new JButton("Modifică structură tabel");
		alterTabButton.setMnemonic(KeyEvent.VK_M);
		alterTabButton.setToolTipText("Modifică structura tabelului selectat " +
			"în listă");
		alterTabButton.setPreferredSize(butDim);
		alterTabButton.addActionListener(this);
		selectButton = new JButton("Interogare");
		selectButton.setMnemonic(KeyEvent.VK_I);
		selectButton.setToolTipText("Vizualizare înregistrări după criterii, " 
			+ "din unul sau mai multe tabele");
		selectButton.setPreferredSize(butDim);
		selectButton.addActionListener(this);
		showTabButton = new JButton("Vizualizare tabel");
		showTabButton.setMnemonic(KeyEvent.VK_V);
		showTabButton.setToolTipText("Vizualizare tabel, cu posibilitatea " +
			"de a adăuga, șterge, sau actualiza câte o înregistrare");
		showTabButton.setPreferredSize(butDim);
		showTabButton.addActionListener(this);
		updateTabButton = new JButton("Actualizează înregistrări");
		updateTabButton.setMnemonic(KeyEvent.VK_U);
		updateTabButton.setToolTipText("Actualizează mai multe înregistrări " +
			"după un anumit criteriu");
		updateTabButton.setPreferredSize(butDim);
		updateTabButton.addActionListener(this);
		deleteRecButton = new JButton("Șterge înregistrări");
		deleteRecButton.setMnemonic(KeyEvent.VK_G);
		deleteRecButton.setToolTipText("Șterge mai multe înregistrări " +
			"după un anumit criteriu");
		deleteRecButton.setPreferredSize(butDim);
		deleteRecButton.addActionListener(this);
		deleteTabButton = new JButton("Șterge tabel");
		deleteTabButton.setMnemonic(KeyEvent.VK_B);
		deleteTabButton.setToolTipText("Șterge tabelul selectat în listă"); 
		deleteTabButton.setPreferredSize(butDim);
		deleteTabButton.addActionListener(this);
		//Adăugăm butoanele la panel:
		butoanePanel.add(showDbButton);
		butoanePanel.add(useDbButton);
		butoanePanel.add(createTabButton);
		butoanePanel.add(describeTabButton);
		butoanePanel.add(alterTabButton);
		butoanePanel.add(showTabButton);
		butoanePanel.add(selectButton);
		butoanePanel.add(updateTabButton);
		butoanePanel.add(deleteRecButton);
		butoanePanel.add(deleteTabButton);
		//Adăugăm în panelul principal:
		listButPanel.add(intGrafScPane);
		listButPanel.add(Box.createHorizontalStrut(50));
		listButPanel.add(butoanePanel);
		//Panelul ce cuprinde totul:
		JPanel intGrafPanel = new JPanel();	
		intGrafPanel.setLayout(new BoxLayout(intGrafPanel, BoxLayout.Y_AXIS));
		intGrafPanel.setOpaque(true);
		intGrafPanel.add(labelPanel);
		intGrafPanel.add(listButPanel);
		intGrafPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 20, 30)); 
		
		setContentPane(intGrafPanel);
		//butoanele pentru tabele:
		JButton[] butoaneTabArray = {createTabButton, describeTabButton, 
			alterTabButton, selectButton, showTabButton, updateTabButton,
			deleteRecButton, deleteTabButton};
		//la început, but. pt. tabele trebuie deselectate :
		for (JButton buton : butoaneTabArray)
			buton.setEnabled(false);
		//înregistrăm driver-ul:
		try {
			DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
		}
		catch (SQLException exc) {
			JOptionPane.showMessageDialog(this, exc.getMessage());
		}
		
		//dialogul inițial:
		DateInit dateInit = new DateInit(this, true);
		dateInit.pack();
		centerFrameOnScreen (dateInit);
		dateInit.setVisible(true);
	}
	
	//funcția întoarce vectorul de tabele și afișează în listă tabelele
	Vector<String> afisTabDinBd(String numeBd) {
		dlm.removeAllElements();
		Vector<String> listTabVector = new Vector<String>();
		try {
			DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
			conex = DriverManager.getConnection("jdbc:odbc:" + numeBd, 
				userString, passwString);
		}
		catch (SQLException exc) {
			JOptionPane.showMessageDialog(this, exc.getMessage(),
				"Eroare conectare", JOptionPane.WARNING_MESSAGE);
			System.exit(1);
		}
		try {
			s_ment = conex.createStatement();
			ResultSet rez = s_ment.executeQuery("Show tables");
			String nmTabStr;
			while (rez.next()) {
				nmTabStr = rez.getString(1);	
				listTabVector.addElement(nmTabStr);
				dlm.addElement(nmTabStr);
			}
			//dacă nu sunt tabele, activăm doar butonul Creează tabel:
			createTabButton.setEnabled(true);
			if (listTabVector.isEmpty()) {
				infoLabel.setText("În baza de date " + numeBd
					+ " nu există nici un tabel.");
			}
			else {
				infoLabel.setText("Baza de date activă este " + numeBd);
				selectButton.setEnabled(true);
			}
		}
		catch (SQLException exc) {System.out.println(exc.getMessage());}
		return listTabVector;
	}
	
	public void actionPerformed(ActionEvent e) {
		//butoanele pentru tabele:
		JButton[] butoaneTabArray = {describeTabButton, 
			alterTabButton, /*selectButton, */showTabButton, updateTabButton,
			deleteRecButton, deleteTabButton};
		
		if (e.getSource() == useDbButton) {
			if (! intGrafList.isSelectionEmpty()) {
				numeBdString = (String) intGrafList.getSelectedValue();
			}
			else {
				numeBdString = JOptionPane.showInputDialog(this, 
					"Introduceți numele DSN al bazei de date\nla care doriți "
					+ "să vă conectați:", "Alegeți baza de date", 
					JOptionPane.QUESTION_MESSAGE);
			}
			afisTabDinBd(numeBdString);
			showDbButton.setEnabled(true);
		}
		
		//pt. a lista bd ale user, le luăm din tab. db din bd mysql:
		else if (e.getSource() == showDbButton) {
			dlm.removeAllElements();
			try {
				conexMysql = DriverManager.getConnection("jdbc:odbc:mysql", 
					"root", "arad");
			}
			catch (SQLException exc) {
				JOptionPane.showMessageDialog(this, exc.getMessage(),
					"Eroare conectare", JOptionPane.WARNING_MESSAGE);
				return;
			}
			try {
				Statement s_mentMysql = conexMysql.createStatement();
				ResultSet rez = s_mentMysql.executeQuery("Select * from db");
				while (rez.next()) {
					if (userString.equals(rez.getString("User")))
						dlm.addElement(rez.getString("Db"));
				}
			}
			catch (SQLException exc) {
				JOptionPane.showMessageDialog(this, exc.getMessage(),
					"Eroare interogare", JOptionPane.WARNING_MESSAGE);
				return;
			}
			showDbButton.setEnabled(false);
			createTabButton.setEnabled(false);
			infoLabel.setText("");
			//but. pt. tabele trebuie dezactivate :
			for (JButton buton : butoaneTabArray)
				buton.setEnabled(false);
			selectButton.setEnabled(false);	
		}
		
		else if (e.getSource() == createTabButton) {
			TabelNou tabelNou = new TabelNou(this);
			tabelNou.pack();
			centerFrameOnScreen (tabelNou);
			tabelNou.setVisible(true);
		}	
		//se pierd indecșii :
		else if (e.getSource() == describeTabButton) {
			String nmTab = intGrafList.getSelectedValue().toString();
			int answ = JOptionPane.showConfirmDialog(this, "Sunteți sigur că "
			 	+ "doriți să stocați local\n structura tabelulului " + 
			 	nmTab + "?");
			if (answ != JOptionPane.YES_OPTION)
				return;
			String listCpChPrim = "";	//list cp. indexate de ch. prim.
			Hashtable<String, Atribute> arrayCpAtribHash = new 
				Hashtable<String, Atribute>();
			Hashtable<String, Atribute> arrayIdxAtribHash = new 
				Hashtable<String, Atribute>();
			ResultSet rez = null;
			try {
				Statement s_ment = conex.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE, 
					ResultSet.CONCUR_READ_ONLY);
				rez = s_ment.executeQuery("DESCRIBE " + nmTab);
				while (rez.next()) {
					Atribute atr = new Atribute(true);
					atr.setProperty("numeCamp", rez.getString("Field"));
					String tipStr = rez.getString("Type");
					if (tipStr.startsWith("enum(") || 
						tipStr.startsWith("set("))
						atr.setProperty("tipCamp", tipStr);
					int offs = tipStr.indexOf("(");
					if (offs > -1) {
						int offs2 = tipStr.indexOf(")");
						atr.setProperty("tipCamp", tipStr.substring(0, offs));
						atr.setProperty("lungCamp", tipStr.substring(offs + 1,
							offs2));
					}
					else {
						int offset = tipStr.indexOf(" ");
						if (offset > -1)
							atr.setProperty("tipCamp", tipStr.substring(0, 
								offset));
						else 
							atr.setProperty("tipCamp", tipStr);
					}
					if (tipStr.indexOf("unsigned") > -1)
						atr.setProperty("unsigned", "unsigned");
					if (tipStr.indexOf("zerofill") > -1)
						atr.setProperty("zerofill", "zerofill");
					if (tipStr.indexOf("binary") > -1)
						atr.setProperty("binary", "binary");
					if (rez.getString("Extra").indexOf("auto_increment") > -1)
						atr.setProperty("auto_increment", "auto_increment");
					if (rez.getString("Null").indexOf("NO") > -1)
						atr.setProperty("not null", "not null");
					String defaultStr = rez.getString("Default");
					if (defaultStr != null && defaultStr.indexOf("CURRENT_")
						< 0) {
						String str = atr.getProperty("tipCamp");
						if (str.indexOf("int") > -1 || str.equals("float") ||
							str.equals("double") || str.equals("numeric") ||
							str.equals("year")){
							atr.setProperty("default", "default " + 
								rez.getString("Default"));
						}
						else 
							atr.setProperty("default", "default \'" + 
								rez.getString("Default") + "\'");
					}		//cp. indexat de ch. primară:
					if (rez.getString("Key").indexOf("PRI") > -1)
						listCpChPrim += atr.getProperty("numeCamp") + ", ";					
					//adăugăm cp. la tabObj
					arrayCpAtribHash.put(atr.getProperty(
						"numeCamp"), atr);	
//JOptionPane.showMessageDialog(null, atr.afisAtrib(true) + "!");
				}
			}
			catch (SQLException exc){
				JOptionPane.showMessageDialog(null, exc.getMessage());
			}
			if (! listCpChPrim.equals("")) {
				listCpChPrim = listCpChPrim.substring(0, 
					listCpChPrim.length() - 2);
				//ch. prim., alți indecși nu putem recupera
				Atribute atr = new Atribute(false);	
				atr.setProperty("numeIndex", "primary");
				atr.setProperty("tipIndex", "primary key");
				atr.setProperty("listaCpIndexate", "(" + listCpChPrim + ")");	
				arrayIdxAtribHash.put(atr.getProperty(
					"numeIndex"), atr);	
			}
			TabelMysqlObj tabObj = new TabelMysqlObj(numeBdString, nmTab,
				arrayCpAtribHash, arrayIdxAtribHash);	

			//salvăm local info. despre tabel :
			try {
				File bddDir = new File(numeBdString);
				if (! bddDir.exists() || ! bddDir.isDirectory()) {
					bddDir.mkdir();	//creează directorul bază de date
				}
				File tabFis = new File(numeBdString,  
					nmTab + ".txt");
				if (tabFis.exists() && tabFis.isFile()) {
					Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(null, "În baza de date există "
				 	+ "deja un fișier\ncu numele " + nmTab 
				 	+ ".txt !", "Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
				}
				else {
					ObjectOutputStream objOutStr = new ObjectOutputStream(
						new FileOutputStream(tabFis));
					objOutStr.writeObject(tabObj);
					try {
						if (objOutStr != null) objOutStr.close();
					}
					catch(IOException except) {}
				}
			}
			catch(IOException exc) {
				Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(null, "Nu s-au putut salva pe "
				 	+ "disc\ninformațiile despre tabel !",
					"Avertisment", JOptionPane.WARNING_MESSAGE);
			}
			
			//afișăm structura tabel :
			TabelOperatii tabelOperatii = new TabelOperatii(this, "DESCRIBE " +
				nmTab, rez);
			tabelOperatii.deleteButton.setVisible(false);
			tabelOperatii.insertButton.setVisible(false);
			tabelOperatii.viewTable.setEnabled(false);
			tabelOperatii.pack();
			centerFrameOnScreen (tabelOperatii);
			tabelOperatii.setVisible(true);
		}
		
		else if (e.getSource() == alterTabButton) {
			TabelModificat tabelModificat = new TabelModificat(this);
			tabelModificat.pack();
			centerFrameOnScreen (tabelModificat);
			tabelModificat.setVisible(true);
		}
		else if (e.getSource() == selectButton) {
			Interogare interogare = new Interogare(this, numeBdString);
			interogare.pack();
			centerFrameOnScreen (interogare);
			interogare.setVisible(true);
		}
		else if (e.getSource() == deleteRecButton) {
			StergeInregistrari stergeInregistrari = new StergeInregistrari(this);
			stergeInregistrari.pack();
			centerFrameOnScreen (stergeInregistrari);
			stergeInregistrari.setVisible(true);
		}
		else if (e.getSource() == updateTabButton) {
			ActualizareInregistrari actualInregistrari = new 
				ActualizareInregistrari(this);
			actualInregistrari.pack();
			centerFrameOnScreen (actualInregistrari);
			actualInregistrari.setVisible(true);
		}
		else if (e.getSource() == deleteTabButton) {
			String nmTab = intGrafList.getSelectedValue().toString();
			int answ = JOptionPane.showConfirmDialog(this, "Sunteți sigur că doriți să "
			 	+ "ștergeți tabelul " + nmTab + "?");
			if (answ != JOptionPane.YES_OPTION)
				return;
			try {
				s_ment.executeUpdate("DROP TABLE " + nmTab);
				((DefaultListModel)intGrafList.getModel()).removeElement(nmTab);
				try {
					File fileDel = new File(numeBdString, nmTab + 
						".txt");
					if (fileDel.exists() && fileDel.isFile()) {
						if (! fileDel.delete())
							JOptionPane.showMessageDialog(this, "Nu s-a putut "
							 	+ "șterge local tabelul " + nmTab,
								"Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
					}
				}
				catch (Exception exc) {
					JOptionPane.showMessageDialog(this, exc.getMessage(),
						"Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
					
				}
			}
			catch (SQLException exc) {
				JOptionPane.showMessageDialog(null, "Nu s-a putut șterge "
				 	+ "tabelul " + nmTab +"\n" + exc.getMessage(),
					"Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
			}	
		}
		else if (e.getSource() == showTabButton) {
			String numeTabel = (String)	intGrafList.getSelectedValue();
			ResultSet rez;
			// aducem toate înregistrările din tabel :
			try {
				Statement s_ment = conex.createStatement(
					ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
				rez = s_ment.executeQuery("SELECT * FROM " + numeTabel);
			}
			catch (SQLException exc) {
				JOptionPane.showMessageDialog(null, "Nu s-a putut executa "
			 	+ " comanda MySQL \nSELECT * FROM " + numeTabel + "\n" + 
			 	exc.getMessage(), "Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
				dispose();
				return;
			}
/*			int nrTotRand = 0;
			try {
			    rez.last();                   
		      	nrTotRand = rez.getRow();
			}
			catch (SQLException exc) {
				exc.getMessage();
				return;
			}
			if (nrTotRand == 0) {
				JOptionPane.showMessageDialog(null, 
			 	"Comanda MySQL SELECT * FROM " + numeTabel + "\n" + 
			 	"a returnat zero înregistrări !", "Atenție !", 
			 	JOptionPane.WARNING_MESSAGE);
				return;
			}*/
	//		else {
				TabelOperatii tabelOperatii = new TabelOperatii(this, "", rez);
				tabelOperatii.pack();
				centerFrameOnScreen (tabelOperatii);
				tabelOperatii.setVisible(true);
			//}
		}
		if (showDbButton.isEnabled()) {		//sunt afișate tabele
			if (intGrafList.isSelectionEmpty())	//nu e selectat vreun tabel
				for (JButton buton : butoaneTabArray)
					buton.setEnabled(false);
			else 
				for (JButton buton : butoaneTabArray)
					buton.setEnabled(true);
		}
	}
	
	public void valueChanged(ListSelectionEvent e) {
		if (showDbButton.isEnabled()) {		//sunt afișate tabele
			//butoanele pentru tabele:
			JButton[] butoaneTabArray = {describeTabButton, 
				alterTabButton, selectButton, showTabButton, updateTabButton,
				deleteRecButton, deleteTabButton};
			//but. pt. tabele trebuie activate :
			for (JButton buton : butoaneTabArray)
				buton.setEnabled(true);
		}
	
	}
	
	//centrează pe ecran fereastra
	public static void centerFrameOnScreen(Component comp) {
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int widthComp = comp.getWidth();
		int heightComp = comp.getHeight();
		int x = (screenSize.width - widthComp) / 2;
		int y = (screenSize.height - heightComp) / 2;
		comp.setLocation(x, y);
	}

	public static void createUIFrame() {
			setDefaultLookAndFeelDecorated(true);
			InterfataGrafica interfataGrafica = new InterfataGrafica();
			interfataGrafica.setDefaultCloseOperation(EXIT_ON_CLOSE);
			interfataGrafica.pack();
			centerFrameOnScreen (interfataGrafica);
			interfataGrafica.setVisible(true);
	}
	
	public static void main(String args[])
	{
		SwingUtilities.invokeLater(new Runnable() {
			public void run(){
				createUIFrame();
			}
		});
	}		

}
