找不到创建加载屏幕的方法

时间:2015-05-29 22:25:33

标签: java swing

我只是在Java中乱用GUI并创建了一个小游戏。在其中,创建105个随机放置的按钮,然后弹出一个指令屏幕,告诉用户找到哪个按钮。我试图弄清楚如何编写一个" Loading ..." JDialog,在后台创建按钮时弹出。问题是,当我运行程序时,JDialog不会加载,直到所有按钮都被创建后,首先会破坏盒子的用途。如何强制加载......"在按钮开始创建之前加载的框???提前致谢。 因为我只是在修补,我的代码并不完美,但在这里:

figure

另外,作为一个侧面问题,在main之前定义的哪个变量应该是静态的?如何让程序编译而不是静态?谢谢!

2 个答案:

答案 0 :(得分:1)

首先看看The Use of Multiple JFrames, Good/Bad Practice?并了解我在运行代码时为什么会吓坏...

为什么不在另一个JButton上使用JPanel之类的东西,而不是创建一堆帧,并将其添加到当前帧(这对CardLayout也很有用。 )

JPanel panel = new JPanel(new GridLayout(10, 0));
Random rnd = new Random();
// creates buttons
for (int i = 0; i < 105; i++) {
    JButton btn = new JButton(String.valueOf(i));
    panel.add(btn);
    //JFrame nextFrame = newFrame(butNum);
    //nextFrame.setVisible(true);
    //butNum++;
}

frame.getContentPane().removeAll();
frame.add(panel);
frame.revalidate();
frame.pack();

或者,如果您真的想要使用“框架”,请考虑改为使用JDesktopPaneJInternalFrame

有关详细信息,请参阅How to Use Internal Frames

  

另外,作为一个侧面问题,在main之前定义的哪个变量应该是静态的?如何在不静止的情况下编译程序?

尽可能没有。不要试图在main方法中创建整个事物,而是使用类constructor来初始化UI并使用另一种方法来实际让游戏滚动...

public class ButtonGame {

    private int butNum = 1;
    private JFrame frame;
    private ActionListener notIt;
    private ActionListener it;
    private Random rand = new Random();
    private int butToFind = rand.nextInt(105);
    private JFrame frameToClose;

    //private static int mouseClicks;
    //private static double time;
    public static void main(String[] args) {
        ButtonGame game = new ButtonGame();
        game.start();
    }

    public ButtonGame() {
        //... All the code that was once in main...
        frame.add(button1);
        frame.setSize(150, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void start() {
        frame.setVisible(true);     
    }

答案 1 :(得分:0)

回答你的问题:

  • 静态方法只能接受静态全局变量
  • 您可以将所有代码放在构造函数中,并使用main来运行程序。

构造函数:

public ButtonGame() {
 // All of your code goes here - except the static methods
}

您还应该使所有其他方法都是非静态的。

运行程序:

public static void main(String[] args) {
    new ButtonGame();
}