【发布时间】:2022-08-04 07:42:23
【问题描述】:
我编写了一个程序,根据用户选择的难度级别创建数独板。有一个使用 JFrame 和 JPanel 的基本 GUI。
板本身是使用 JTextField 的 2D 数组构建的,以允许用户进行编辑,我制作了一个代表数字 1-9 的 JButton 表。
我试图做到这一点,所以当我在光标位于相关文本字段上时按下数字按钮时,它会将该数字输入到该字段中。
我认为我定义按钮的方式存在问题,但我会喜欢手。
/*Java Program to solve Sudoku problem using Backtracking*/
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
public class Solver extends Board {
Solver(int N, int K) {
super(N, K);
}
private static void createWindow() {
JFrame frame = new JFrame(\"Sudoku\");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createUI(frame);
frame.setSize(250, 80);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static void createUI(final JFrame frame) {
JPanel panel = new JPanel();
LayoutManager layout = new FlowLayout();
panel.setLayout(layout);
JButton button = new JButton(\"Play\");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String result = (String) JOptionPane.showInputDialog(
frame,
\"Difficulty Glossary:\\n\\n Hard - 50/81 blank spaces\\n Medium - 35/81 blank spaces\\n Easy - 20/81 blank spaces\\n\\nChoose your desired difficulty:\\n\\tHard: 1\\n\\tMedium: 2\\n\\tEasy: 3\\nIf your input doesn\'t match one of these digits, the board generated will be on easy mode.\",
\"Difficulty Glossary\",
JOptionPane.PLAIN_MESSAGE,
null,
null,
\"3\"
);
optionBoard();
play(Integer.parseInt(result));
}
});
panel.add(button);
frame.getContentPane().add(panel, BorderLayout.CENTER);
}
public static void optionBoard(){
}
public static void play(int level) {
int N = 9, K = 0;
switch (level) {
case 1:
K = 50;
break;
case 2:
K = 35;
break;
default:
K = 20;
break;
}
Solver sudoku = new Solver(N, K);
sudoku.fillValues();
createBoard(sudoku.puzzle);
}
public static void createBoard(int[][] puzzle) {
final Border fieldBorder = BorderFactory.createLineBorder(Color.BLACK);
final JPanel grid = new JPanel(new GridLayout(9, 9));
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
final JTextField field = new JTextField(2);
if (puzzle[i][j] != 0) {
field.setText(puzzle[i][j] + \"\");
} else {
field.setText(\"\");
}
field.setHorizontalAlignment(JTextField.CENTER); //Center text horizontally in the text field.
field.setBorder(fieldBorder); //Add the colored border.
grid.add(field);
}
}
final JPanel digits = new JPanel(new GridLayout(3, 3));
int num=1;
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 4; j++) {
final JButton digit = new JButton(num+\"\");
num++;
digits.add(digit);
}
}
final JPanel centeredGrid = new JPanel(new GridBagLayout());
centeredGrid.add(digits);
centeredGrid.add(grid);
final JFrame frame = new JFrame(\"Sudoku Board\");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(centeredGrid);
frame.setSize(400,400);
frame.setVisible(true);
JButton button = new JButton(\"Check\");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
// centeredGrid.add(button);
}
// Driver code
public static void main(String[] args) {
createWindow();
}
}
我只提供了相关的 GUI 类,因为构建电路板的数学逻辑部分是可靠的并且工作正常。这就是 Board 类。
-
恐怕我分心了。您真正的问题是如何在按下 JButton 时更新一些 JTextField 吗?
-
请参阅我的答案的编辑。如果您对此有任何疑问,请在答案中发表评论。
标签: java swing jbutton actionlistener jtextfield