मैं अभी के लिए एक सुडोकू ग्रिड बनाने की कोशिश कर रहा हूँ। तो मैं 2 सरणी (डबल आयाम) का उपयोग करता हूं जिसमें सभी जेबटन होते हैं और दूसरे में 9 जेपीनल होते हैं। मैंने प्रत्येक जेपीनल में 9 बटन रखे, मैंने प्रत्येक जेपीनल में (3,3) के ग्रिडलाउट का उपयोग किया और सभी जेपीनल एक बड़े जेपीनल में हैं जो ग्रिडलाउट का भी उपयोग कर रहा है। समस्या यह है कि बटन विंडो के नीचे हैं, इसलिए सभी प्रदर्शित नहीं होते हैं। मैंने पहले जेपीनल (पहले 9 बटन वाले) के लिए एक हरे रंग की पृष्ठभूमि सेट की है, यह देखने के लिए कि इसके बटनों की तुलना कहां से की गई थी। और मैं बटन और न ही पैनल का आकार नहीं बदल सकता।

यहाँ एचएमआई की एक स्क्रीन

यहाँ मेरी कक्षा का कोड:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Sudoku extends JFrame implements ActionListener {


    public Sudoku(){
        //Initialise the window and show it
        this.setTitle("Sudoku Solver");
        this.setSize(1000, 500);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel pan = new JPanel();
        pan.setLayout(new GridLayout(3,3));

        //Initialise an array of JPanel
        JPanel[][] jPanelTab = new JPanel[3][3];
        for(int i = 0; i < 3;i++){
            for(int j = 0; j < 3;j++){
                jPanelTab[i][j] = new JPanel();
                jPanelTab[i][j].setLayout(new GridLayout(3,3));
            }
        }


        //Initialise the JButtons
        JButton[][] boutonTab = new JButton[9][9];
        for(int i = 0; i < 9;i++){
            for(int j = 0; j < 9;j++){
                boutonTab[i][j] = new JButton();
                boutonTab[i][j].setText(""+i+"/"+j);
            }
        }


        for(int h = 0; h < 3; h++) {
            int n = 0;
            for (int i = 0; i < 3; i++) {
                int column = 0;
                for (int j = 0; j < 9; j++) {
                    jPanelTab[h][column].add(boutonTab[n][j]);
                    if (j == 2 || j == 5) {
                        column++;
                    }
                }
                n++;
            }
        }

        //Add the 9 JPanels to the JFrame
        for(int i = 0; i < 3;i++){
            for(int j = 0; j < 3;j++){
                if(j == 0 && i == 0)
                    pan.add(jPanelTab[i][j]).setBackground(Color.green);
                else
                    pan.add(jPanelTab[i][j]);

            }
        }
        this.setContentPane(pan);
        this.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

आपके उत्तरों के लिए धन्यवाद!

0
Adrien_CH 3 फरवरी 2020, 21:01

1 उत्तर

सबसे बढ़िया उत्तर

2D सरणियों के साथ काम करते समय पहली अनुक्रमणिका पंक्ति होती है और दूसरी अनुक्रमणिका स्तंभ होती है।

इसलिए बेहतर वैरिएबल नामों का उपयोग करने से लूपिंग लॉजिक को समझने में मदद मिल सकती है। नीचे दिए गए मेरे कोड में मैंने "आर" (पंक्ति) और "सी" (कॉलम) वाले चर का उपयोग किया है।

अपने लूपिंग कोड में उपरोक्त चर नामों का उपयोग करते समय अब ​​आप कॉलम से पहले पंक्तियों के माध्यम से लूप करते हैं, इसलिए बाहरी लूप में वेरिएबल नाम में "आर" होगा और आंतरिक लूप में वेरिएबल नाम में "सी" होगा।

उम्मीद है कि जब आप कोड पढ़ेंगे तो इसे समझना आसान हो जाएगा।

कोड में किया गया मुख्य परिवर्तन वह तर्क है जिसका उपयोग प्रत्येक 9 पैनल में अलग-अलग बटन जोड़ने के लिए किया जाता है।

ध्यान दें कि कैसे बटन के लिए शुरुआती इंडेक्स पैनल के लिए इंडेक्स के 3 गुना हैं। पैनल में जोड़े गए हर तीसरे बटन के लिए कॉलम और रो इंडेक्स को रीसेट किया जाना चाहिए।

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Sudoku extends JFrame {

    public Sudoku(){

        //Initialise the window and show it
        this.setTitle("Sudoku Solver");
        this.setSize(1000, 500);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel board = new JPanel();
        board.setLayout(new GridLayout(3,3));

        //Initialise an array of JPanel
        JPanel[][] panels = new JPanel[3][3];
        for (int r = 0; r < 3; r++)
        {
            for (int c = 0; c < 3; c++)
            {
                JPanel panel = new JPanel( new GridLayout(3, 3) );
                panels[r][c] = panel;
                board.add( panel );
            }
        }

        //Initialise the JButtons
        JButton[][] buttons = new JButton[9][9];
        for(int r = 0; r < 9; r++)
        {
            for(int c = 0; c < 9; c++)
            {
                buttons[r][c] = new JButton(r + "/" + c);
            }
        }

        for (int panelR = 0; panelR < 3; panelR++)
        {
            for (int panelC = 0; panelC < 3; panelC++)
            {
                int buttonR = panelR * 3;
                int buttonC = panelC * 3;

                for (int i = 0; i < 9; i++)
                {
                    panels[panelR][panelC].add(buttons[buttonR][buttonC]);
                    buttonC++;

                    if ((i + 1) % 3 == 0)
                    {
                        buttonC = panelC * 3;
                        buttonR++;
                    }
                }
            }
        }

        this.setContentPane(board);
        this.setVisible(true);

    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> new Sudoku() );
    }
}
1
camickr 3 फरवरी 2020, 23:43