-
SUDOKU game problem
Hello
I am trying to program an online sudoku game, and the layout of the game is a grid of 9x9 JTextFields. So, I'm arranging these 81 Fields in a panel, however, I need to have some sort of line between each 3x3 block. If anyone has ever played sudoku, you'd know what I mean. Any ideas how to create these lines?
Thanks for any advice,
bumblyb33
-
One solution: create 9 JPanels to each hold 9 of your JTextFields. Then add a border to the JPanels.
-
For example:
Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class SudokuEg
{
private static final Dimension FIELD_SIZE = new Dimension(60, 60);
private static final int BORDER_WIDTH = 3;
private static final float FONT_POINTS = 25;
private JPanel mainPanel = new JPanel();
private JPanel[][] subPanels = new JPanel[3][3];
private JTextField[][] fields = new JTextField[9][9];
public SudokuEg()
{
mainPanel.setBorder(BorderFactory.createLineBorder(Color.black, BORDER_WIDTH));
mainPanel.setLayout(new GridLayout(3, 3));
// create 3x3 grid of sub-panels,
// add a line border to each sub-panel
// and add to main panel
for (int i = 0; i < subPanels.length; i++)
{
for (int j = 0; j < subPanels[i].length; j++)
{
subPanels[i][j] = new JPanel(new GridLayout(3, 3));
subPanels[i][j].setBorder(
BorderFactory.createLineBorder(Color.black, BORDER_WIDTH));
mainPanel.add(subPanels[i][j]);
}
}
// create all JTextFields
// set fields preferred size, font, center text
// and add to sub-panels
for (int i = 0; i < fields.length; i++)
{
for (int j = 0; j < fields[i].length; j++)
{
fields[i][j] = new JTextField();
fields[i][j].setPreferredSize(FIELD_SIZE);
Font font = fields[i][j].getFont().deriveFont(Font.BOLD, FONT_POINTS);
fields[i][j].setFont(font);
fields[i][j].setHorizontalAlignment(SwingConstants.CENTER);
subPanels[i/3][j/3].add(fields[i][j]);
}
}
}
public JComponent getPanel()
{
return mainPanel;
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SudokuEg Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SudokuEg().getPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}