Skip to content

Instantly share code, notes, and snippets.

@DeltaGeek
Last active December 29, 2015 17:49
Show Gist options
  • Save DeltaGeek/7706880 to your computer and use it in GitHub Desktop.
Save DeltaGeek/7706880 to your computer and use it in GitHub Desktop.
package sudoku.gui;
import sudoku.model.SudokuModel;
import static javax.swing.SwingUtilities.invokeLater;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingWorker;
public class SudokuGui {
private JFrame frame;
private SudokuModel model;
public SudokuGui(SudokuModel model) {
this.model = model;
invokeLater(new Runnable() {
public void run() {
buildGui();
}
});
}
private void buildGui() {
frame = new JFrame("Sudoku Solver");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(550, 550));
JMenuBar menus = new JMenuBar();
JMenu sudokuMenu = new JMenu("Sudoku");
JMenuItem loadItem = new JMenuItem("Load Puzzle");
loadItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
loadPuzzle();
}
});
sudokuMenu.add(loadItem);
menus.add(sudokuMenu);
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(3, 3, 0, 0));
for (int i = 0; i < 9; i++) {
mainPanel.add(new BoxRenderer(model, i));
}
JPanel buttons = new JPanel();
JButton btn = new JButton("Solve");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
model.solve();
JOptionPane.showMessageDialog(frame, "Finished.");
return model;
}
}.execute();
}
});
buttons.add(btn);
btn = new JButton("Reset");
buttons.add(btn);
frame.setJMenuBar(menus);
frame.add(mainPanel, BorderLayout.CENTER);
frame.add(buttons, BorderLayout.SOUTH);
frame.pack();
}
public void show() {
invokeLater(new Runnable() {
public void run() {
frame.setVisible(true);
}
});
}
private void loadPuzzle() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment