public Main() {
		// call the super constructor
		super();
		
		// Set up the frame
		this.setResizable(false);
		this.setTitle("Sudoku Solver");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(framex, framey, framewidth, frameheight);
		
		// Set the layout of the main panel
		Panel.setLayout(new BoxLayout(Panel, BoxLayout.Y_AXIS));
		
		// Set up the List of entries and the number format for it
		NumberFormat formatter = NumberFormat.getInstance() ;
		formatter.setMaximumIntegerDigits(1);
		entries = new JFormattedTextField[9][9] ;
		
		// Set out the layout of the top Panel
		topPanel.setLayout(new GridLayout(9,9));
		for(int i = 0 ; i < 9 ; ++i) {
			for(int j = 0 ; j < 9 ; ++j) {
				entries[i][j] = new JFormattedTextField(formatter) ;
				// Add it to the panel
				topPanel.add(entries[i][j]) ;
			}
		}
		
		// Add the top panel to the main panel
		Panel.add(topPanel) ;
		
		// Add the button and the selector, then their panel to the main Panel
		// Add all of the methods for solving to the array
		methods.addItem(bruteforce);
		// set layout of bottom panel
		bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS));
		bottomPanel.add(methods) ;
		bottomPanel.add(solver) ;
		Panel.add(bottomPanel) ;
		
		this.add(Panel) ;
		
		// Lastly, we set ourselves as visible
		this.setVisible(true) ;
		
		// Add action listener to the solver button
		solver.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Cell[][] cells = new Cell[9][9] ;
				for(int i = 0 ; i < 9 ; ++i) {
					for(int j = 0 ; j < 9 ; ++j) {
						if(entries[i][j].getValue() == null)
							cells[i][j] = new Cell(0, false) ;
						else {
							long val = (long) entries[i][j].getValue() ;
							cells[i][j] = new Cell((int) val, false) ;
						}
					}
				}
				if(methods.getSelectedItem() == bruteforce) {
					bruteforce.solve() ;
				}
			}
			
		});
	}