Java 数独图形用户界面问题
我需要创建一个Suduku游戏板,如下所示: 这是我完成这项任务所需要的条件,但我有一些问题Java 数独图形用户界面问题,java,swing,sudoku,Java,Swing,Sudoku,我需要创建一个Suduku游戏板,如下所示: 这是我完成这项任务所需要的条件,但我有一些问题 使用两个for循环来绘制文本字段,而不是清单81中的暴力文本字段。你应该这样做: for (int k = 1; k <= 9; k++) { JPanel level2 = new JPanel(); …. for (int i = 1; i <= 9; i++) { JTextField text
for (int k = 1; k <= 9; k++)
{
JPanel level2 = new JPanel();
….
for (int i = 1; i <= 9; i++)
{
JTextField text = new JTextField();
…
}
gridPanel.add(level2);
}
问题是,在我当前的版本中,右菜单水平显示,我看不到网格。此外,我不知道如何添加输出区域 当使用Swing面对此类框架时,您需要将框架划分为多个部分,并分别进行处理。我的意思是,通过查看图像,您可以轻松识别数独、菜单和输出。因此,您的答案应该首先尝试分别创建它们,然后加入它们 考虑到这一点,您必须注意:
- 有3个主要组件:数独、菜单和输出
- 3个主要组件可能使用
,因为它们可能位于西部、东部和南部边界布局
- 数独组件是由3x3个较小网格组成的3x3网格(因此您可以更改黑色边框)
- 菜单组件是一个5x1网格,每个位置都有按钮
- 输出组件是单个文本框
组合框
上的选项),但您的解决方案应如下所示:
public class SudokuLayout extends JFrame {
public SudokuLayout() {
// Create panel for Sudoku
JPanel board = new JPanel();
board.setLayout(new GridLayout(3, 3));
board.setBorder(BorderFactory.createLineBorder(Color.BLACK));
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 3; ++col) {
JPanel box = new JPanel(new GridLayout(3, 3));
box.setBorder(BorderFactory.createLineBorder(Color.BLACK));
for (int cell = 0; cell < 9; ++cell) {
box.add(new JTextField(2));
}
board.add(box);
}
}
// Create difficulty combo box
JComboBox<String> difficultyChoices = new JComboBox<>(new String[] { "Hard", "Easy" });
difficultyChoices.setSelectedIndex(0);
// Create menu panel
JPanel menu = new JPanel();
menu.setLayout(new GridBagLayout());
GridBagConstraints menuConstraints = new GridBagConstraints();
menuConstraints.anchor = GridBagConstraints.WEST;
menuConstraints.weightx = 0.5;
menuConstraints.weighty = 0.5;
menuConstraints.gridwidth = 2;
menuConstraints.gridx = 2;
menuConstraints.gridy = 0;
menu.add(new JButton("Reset"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 1;
menu.add(new JButton("Hint"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 2;
menu.add(new JButton("Solve"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 3;
menu.add(new JButton("New Puzzle"), menuConstraints);
menuConstraints.weighty = 1.0;
menuConstraints.gridx = 2;
menuConstraints.gridy = 4;
menu.add(new JLabel("Difficulty:"), menuConstraints);
menuConstraints.fill = GridBagConstraints.HORIZONTAL;
menuConstraints.weightx = 0.5;
menuConstraints.weighty = 0.5;
menuConstraints.gridwidth = 2;
menuConstraints.gridx = 0;
menuConstraints.gridy = 5;
menu.add(difficultyChoices, menuConstraints);
// Create output panel
JTextArea output = new JTextArea(5, 20);
output.setEditable(false);
output.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE), "Output Area"));
// Join the 3 panels on the frame
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(board, BorderLayout.WEST);
cp.add(menu, BorderLayout.EAST);
cp.add(output, BorderLayout.SOUTH);
}
public static void main(String[] args) {
// Create a frame and set its properties
JFrame frame = new SudokuLayout();
frame.setTitle("TestSudoku");
frame.setSize(600, 600);
frame.setLocationRelativeTo(null); // Center the frame
// Setup the window
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
公共类SudokuLayout扩展JFrame{
公共SudokuLayout(){
//创建数独游戏面板
JPanel board=新的JPanel();
board.setLayout(新网格布局(3,3));
board.setboorder(BorderFactory.createLineBorder(Color.BLACK));
对于(int行=0;行<3;++行){
用于(整数列=0;列<3;++列){
JPanel框=新的JPanel(新的网格布局(3,3));
box.setboorder(BorderFactory.createLineBorder(Color.BLACK));
用于(整数单元格=0;单元格<9;++单元格){
框。添加(新JTextField(2));
}
板。添加(框);
}
}
//创建难度组合框
JComboBox-difficultyChoices=newjcombobox(新字符串[]{“硬”、“易”});
困难选择。设置选定的索引(0);
//创建菜单面板
JPanel菜单=新建JPanel();
menu.setLayout(新GridBagLayout());
GridBagConstraints menuConstraints=新的GridBagConstraints();
menuConstraints.anchor=gridbagstraints.WEST;
menuConstraints.weightx=0.5;
menuConstraints.weighty=0.5;
menuConstraints.gridwidth=2;
menuConstraints.gridx=2;
menuConstraints.gridy=0;
添加(新JButton(“重置”),菜单约束;
menuConstraints.gridx=2;
menuConstraints.gridy=1;
添加(新JButton(“提示”),菜单约束;
menuConstraints.gridx=2;
menuConstraints.gridy=2;
添加(新JButton(“解决”),菜单约束;
menuConstraints.gridx=2;
menuConstraints.gridy=3;
添加(新JButton(“新拼图”),菜单约束;
menuConstraints.weighty=1.0;
menuConstraints.gridx=2;
menuConstraints.gridy=4;
添加(新JLabel(“难度”)、菜单约束;
menuConstraints.fill=GridBagConstraints.HORIZONTAL;
menuConstraints.weightx=0.5;
menuConstraints.weighty=0.5;
menuConstraints.gridwidth=2;
menuConstraints.gridx=0;
menuConstraints.gridy=5;
添加(困难选项、菜单约束);
//创建输出面板
JTextArea输出=新的JTextArea(5,20);
output.setEditable(false);
setboorder(BorderFactory.createTitleBorder(BorderFactory.createLineBorder(Color.BLUE),“输出区域”);
//将3个面板连接到框架上
容器cp=getContentPane();
cp.setLayout(新的BorderLayout());
cp.add(线路板,边界布局,西侧);
cp.add(菜单,BorderLayout.EAST);
cp.add(输出,边界布局,南部);
}
公共静态void main(字符串[]args){
//创建框架并设置其属性
JFrame frame=新的SudokuLayout();
frame.setTitle(“TestSudoku”);
框架。设置尺寸(600600);
frame.setLocationRelativeTo(null);//将帧居中
//设置窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
更新:我用
GridBagLayout
菜单和带边框的TextArea
输出来更新我的答案。但是我有一些问题
-你有什么问题?无法理解网格或选择难度。我也不确定如何将按钮移到一边。然后将其添加到问题中,明确您的问题是什么以及您希望得到什么帮助。就目前的情况而言,你的问题仅仅是对你正在努力做的事情的陈述。非常感谢你的帮助。我可以再问你一个问题吗?你知道我怎样才能在按下按钮后创建输出吗?我假设一个if-else语句可能允许这样做,但我不确定如何实现它“我可以再问你一个问题吗?”你可以问尽可能多的问题,但每个问题都应该在一个单独的问题线程上——毕竟这是一个问答网站。如果有助于解决当前问题,请联系我们。@DanielHenrich您可以在按钮创建上实现侦听器
,也可以修改其他GUI元素。然而,正如Andrew Thompson所说,考虑接受这个问题,问另一个问题,这样我就可以发展更多的问题。
public class SudokuLayout extends JFrame {
public SudokuLayout() {
// Create panel for Sudoku
JPanel board = new JPanel();
board.setLayout(new GridLayout(3, 3));
board.setBorder(BorderFactory.createLineBorder(Color.BLACK));
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 3; ++col) {
JPanel box = new JPanel(new GridLayout(3, 3));
box.setBorder(BorderFactory.createLineBorder(Color.BLACK));
for (int cell = 0; cell < 9; ++cell) {
box.add(new JTextField(2));
}
board.add(box);
}
}
// Create difficulty combo box
JComboBox<String> difficultyChoices = new JComboBox<>(new String[] { "Hard", "Easy" });
difficultyChoices.setSelectedIndex(0);
// Create menu panel
JPanel menu = new JPanel();
menu.setLayout(new GridBagLayout());
GridBagConstraints menuConstraints = new GridBagConstraints();
menuConstraints.anchor = GridBagConstraints.WEST;
menuConstraints.weightx = 0.5;
menuConstraints.weighty = 0.5;
menuConstraints.gridwidth = 2;
menuConstraints.gridx = 2;
menuConstraints.gridy = 0;
menu.add(new JButton("Reset"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 1;
menu.add(new JButton("Hint"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 2;
menu.add(new JButton("Solve"), menuConstraints);
menuConstraints.gridx = 2;
menuConstraints.gridy = 3;
menu.add(new JButton("New Puzzle"), menuConstraints);
menuConstraints.weighty = 1.0;
menuConstraints.gridx = 2;
menuConstraints.gridy = 4;
menu.add(new JLabel("Difficulty:"), menuConstraints);
menuConstraints.fill = GridBagConstraints.HORIZONTAL;
menuConstraints.weightx = 0.5;
menuConstraints.weighty = 0.5;
menuConstraints.gridwidth = 2;
menuConstraints.gridx = 0;
menuConstraints.gridy = 5;
menu.add(difficultyChoices, menuConstraints);
// Create output panel
JTextArea output = new JTextArea(5, 20);
output.setEditable(false);
output.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE), "Output Area"));
// Join the 3 panels on the frame
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(board, BorderLayout.WEST);
cp.add(menu, BorderLayout.EAST);
cp.add(output, BorderLayout.SOUTH);
}
public static void main(String[] args) {
// Create a frame and set its properties
JFrame frame = new SudokuLayout();
frame.setTitle("TestSudoku");
frame.setSize(600, 600);
frame.setLocationRelativeTo(null); // Center the frame
// Setup the window
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}