Как получить значения из JtextField, который был сделан в конструкторе - PullRequest
0 голосов
/ 08 мая 2018
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

public class GUI extends JFrame {
public static JButton solveButton = new JButton("Solve");

public GUI() {
    // 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 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 = 2;
    menu.add(solveButton, menuConstraints);


    menuConstraints.fill = GridBagConstraints.HORIZONTAL;
    menuConstraints.weightx = 0.5;
    menuConstraints.weighty = 0.5;
    menuConstraints.gridwidth = 2;
    menuConstraints.gridx = 0;
    menuConstraints.gridy = 5;

    // Create output panel
    JTextArea output = new JTextArea(10, 15);
    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 GUI();
    frame.setTitle("Sudoku Solver");
    frame.setSize(600, 600);
    frame.setLocationRelativeTo(null); // Center the frame

    // Setup the window
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

    solveButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("I was pressed");
        }
    });
}

}

У меня есть графический интерфейс для решения судоку. Как я могу получить все значения из JTextFields и сохранить их в массиве 2x2.

Я хочу сохранить все значения в массиве 2x2, а затем передать эти значения классу, который я создал для решения судоку.

Я не знаю, как получить все значения из текстовых полей сразу при нажатии кнопки SaveButton.

Любая помощь будет оценена

1 Ответ

0 голосов
/ 08 мая 2018

Я думаю, вы можете установить идентификатор с массивом текстового поля, который должен быть уникальным значением.

Вы можете создать массив полей, определенных как;

JTextField[]  txtfields = new JTextField[3*3*9];

и счетчик с инкрементным значением.

int cnt = 0;
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) {
            txtfields[cnt] = new JTextField(2);
            box.add(txtfields[cnt++]);
        }
        board.add(box);
    }
}

Вы можете найти некоторое значение текстового поля в том же порядке в слушателе действий, а затем отобразить его в текстовой области.

solveButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("I was pressed");
        StringBuilder stbuld = new StringBuilder();
        int cnt = 0;
        for (int row = 0; row < 3; ++row) {
            for (int col = 0; col < 3; ++col) {
                for (int cell = 0; cell < 9; ++cell) {
                    String value = txtfields[cnt].getText();

                    if(value != null && !value.equals(""))
                    {
                        System.out.println(row + ":" + col + ":" + ":" + cell + ":" + value);
                        stbuld.append("["+row + "][" + col + "][" + cell + "] = " + value + "\n");
                    }

                    cnt++;
                }
            }
        }

        output.setText(stbuld.toString());
    }
});

Вывод jframe будет следующим:

enter image description here

Хорошего кодирования ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...