为什么我的JFrame不显示?

时间:2011-09-22 09:14:43

标签: java swing jframe

我正试图在一个有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 个答案:

答案 0 :(得分:7)

外部循环应从零开始:

for(int i=0;i<9;i++){

答案 1 :(得分:4)

尝试调用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);
}

答案 2 :(得分:4)

你似乎有两个框架。 1是JFrame(类GrpahicSolver本身),另一个是你在其中创建的框架。

我建议你用this.addPanel()替换frame.addPanel(),它应该可以工作。

答案 3 :(得分:4)

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);
            }
        });
    }
}