I have a take home assignment where I need to make a sudoku board that displays integers from a file on a board and allows someone to click a JButton and input a missing value.
I have gotten the board to show up using JPanel and printed the text file to the individual buttons but I can't figure out how to get the addActionListener to pick up any of the buttons that are missing values. It only works for the last button that is blank. (Blank buttons are given a value of 0).
my question is why is the last blank button only being targeted. There are 6 in total but only the last one brings up the dialogue box after being clicked?
public class MyCustomeFrame extends JFrame {
private int[][] numbers;
private String[] nums;
JButton b1;
JButton b2;
JButton b3;
JButton b4;
private JPanel p2;
public MyCustomeFrame() {
// Create the border layout
setLayout(new BorderLayout(5, 5));
// Create a new panel for the buttons to be placed on
JPanel p1 = new JPanel();
// Create 3 buttons
b1 = new JButton("Load");
b2 = new JButton("Save");
b3 = new JButton("Check");
// Adds the 3 buttons to the panel
p1.add(b1);
p1.add(b2);
p1.add(b3);
// Create the event handlers for when the button is pressed
b1.addActionListener(new MyButtonHandler());
b2.addActionListener(new MyButtonHandler());
b3.addActionListener(new MyButtonHandler());
// Place the panel south in the window
add(p1, BorderLayout.SOUTH);
p2 = new JPanel();
// Define the grid parameters
p2.setLayout(new GridLayout(9, 9, 5, 5));
// Show the grid
add(p2, BorderLayout.CENTER);
int[][] numbers = new int[9][9];
int rowIdx = 0;
//This is where i read the input file located on my computer and place the numbers on the Sudoku board
try {
BufferedReader bReader = new BufferedReader(new FileReader(
"C:\\Users\\Derek\\Desktop\\input.txt"));
String line = bReader.readLine();
while (line != null) {
nums = line.split(",");
for (int i = 0; i < numbers[0].length; i++) {
numbers[rowIdx][i] = Integer.parseInt(nums[i]);
// This creates the individual buttons that are then placed on the board
if (numbers[rowIdx][i] >= 1) {
p2.add(new JButton(nums[i]));
} else {
//this is where I'm having the issue
b4 = new JButton(" ");
p2.add(b4);
b4.addActionListener(new MyButtonHandler());
}
}
rowIdx++;
line = bReader.readLine();
}
bReader.close();
} catch (FileNotFoundException g) {
System.out.println("File Not Found!");
} catch (IOException g) {
System.out.println("Something went wrong...Try Again");
g.printStackTrace();
}
}
class MyButtonHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
System.out.println("Loading File...");
} else if (e.getSource() == b2) {
System.out.println("Saving File...");
try {
BufferedWriter bWriter = new BufferedWriter(new FileWriter(
new File("C:\\SudokuSave.txt"), true));
bWriter.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if (e.getSource() == b3) {
System.out.println("Checking Solution...");
} else if (e.getSource() == b4) {
System.out.println("clicked");
JOptionPane.showInputDialog("Input a number between 1 - 9");
}
}
}
}