import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
/**
*
*
*/
public class Gui extends JFrame {
protected GuiBoard guiBoard;
protected ListenerFactory listenerFactory;
protected JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
menuBar.add(createFileMenu());
menuBar.add(createOptionsMenu());
return menuBar;
}
protected JPanel createContentPane() {
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
//pane.add(guiBoard);
return pane;
}
protected JMenu createFileMenu() {
JMenu fileMenu = new JMenu();
fileMenu.setText("File");
fileMenu.add(createLoadMenuItem());
fileMenu.add(createExitMenuItem());
return fileMenu;
}
protected JMenu createOptionsMenu() {
JMenu optionsMenu = new JMenu();
optionsMenu.setText("Options");
return optionsMenu;
}
protected JMenuItem createExitMenuItem() {
JMenuItem exitMenuItem = new JMenuItem();
exitMenuItem.setText("Exit");
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
Event.CTRL_MASK, true));
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
return exitMenuItem;
}
protected JMenuItem createLoadMenuItem() {
JMenuItem loadMenuItem = new JMenuItem();
loadMenuItem.setText("Load");
loadMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,
Event.CTRL_MASK, true));
loadMenuItem.addActionListener(listenerFactory
.getLoadFileListener());
return loadMenuItem;
}
/**
* This is the default constructor
*/
public Gui(ListenerFactory listenerFactory) {
super();
//guiBoard = new GuiBoard(listenerFactory);
this.listenerFactory = listenerFactory;
setContentPane(createContentPane());
setJMenuBar(createMenuBar());
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
protected void createAndShowGUI() {
setTitle("Sudoku");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setResizable(false);
setVisible(true);
}
protected void update(Board b) {
getGlassPane().setVisible(true);
if (null != b) {
if (null == guiBoard) {
guiBoard = new GuiBoard(listenerFactory);
getContentPane().add(guiBoard);
}
guiBoard.update(b);
} else {
if (null != guiBoard) {
getContentPane().remove(guiBoard);
guiBoard = null;
}
}
pack();
getGlassPane().setVisible(false);
}
}