Почему не появляется мой JFrame? - PullRequest
3 голосов
/ 22 сентября 2011

Я пытаюсь, чтобы в окне с 81 ящиком появилась загадка с судоку. Я сделал это:

import java.awt.GridLayout;
import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class GraphicSolver extends JFrame {

GraphicSolver(int[][] spelplan) {

    Panel panel = new Panel(new GridLayout(9,9));

    for(int i=9;i<9;i++){
        for(int x=0;x<9;x++){
            panel.add(new JLabel(""+spelplan[i][x]));
        }
    }

    Frame frame = new Frame();
    frame.add(panel);


    frame.setVisible(true);

}
}

Однако, это дает мне только пустое окно без каких-либо цифр. Я был бы рад, если бы кто-то мог указать мне правильное направление.

Ответы [ 4 ]

7 голосов
/ 22 сентября 2011

Внешний цикл должен начинаться с нуля:

for(int i=0;i<9;i++){
4 голосов
/ 22 сентября 2011

Graphic Solver

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

public class GraphicSolver {

    GraphicSolver(int[][] spelplan) {
        // presumes each array 'row' is the same length
        JPanel panel = new JPanel(new GridLayout(
            spelplan.length,
            spelplan[0].length,
            8,
            4));

        for(int i=0;i<spelplan.length;i++){
            for(int x=0;x<spelplan[i].length;x++){
                panel.add(new JLabel(""+spelplan[i][x]));
            }
        }

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                int[][] plan = new int[4][7];
                for (int x=0; x<plan.length; x++) {
                    for (int y=0; y<plan[x].length; y++) {
                        plan[x][y] = (x*10)+y;
                    }
                }
                new GraphicSolver(plan);
            }
        });
    }
}
4 голосов
/ 22 сентября 2011

У вас, кажется, есть два кадра. 1 - это JFrame (сам класс GrpahicSolver), а другой фрейм, который вы создаете в нем.

Я предлагаю вам заменить frame.addPanel () на this.addPanel (), и он должен работать.

4 голосов
/ 22 сентября 2011

Попробуйте позвонить frame.pack (), это упакует все компоненты в кадр, который будет отображаться после вычисления правильного размера с панелями. Кроме того, следование исправлению, предложенному @trashgod выше, решит тот факт, что панели не были добавлены, а исправление @Ashkan Aryan сделает ваш код немного более разумным (хотя он должен работать без него, но тогда нет смысла наследование от JFrame).

Код ниже работает для меня:

GraphicSolver(int[][] spelplan) {
    Panel panel = new Panel(new GridLayout(9,9));

    for(int i=0;i<9;i++){
        for(int x=0;x<9;x++){
            panel.add(new JLabel(""+spelplan[i][x]));
        }
    }

    this.add(panel);
    this.pack ();
    this.setVisible(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...