我只是在Java中乱用GUI并创建了一个小游戏。在其中,创建105个随机放置的按钮,然后弹出一个指令屏幕,告诉用户找到哪个按钮。我试图弄清楚如何编写一个" Loading ..." JDialog,在后台创建按钮时弹出。问题是,当我运行程序时,JDialog不会加载,直到所有按钮都被创建后,首先会破坏盒子的用途。如何强制加载......"在按钮开始创建之前加载的框???提前致谢。 因为我只是在修补,我的代码并不完美,但在这里:
figure
另外,作为一个侧面问题,在main之前定义的哪个变量应该是静态的?如何让程序编译而不是静态?谢谢!
答案 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();
或者,如果您真的想要使用“框架”,请考虑改为使用JDesktopPane
和JInternalFrame
。
有关详细信息,请参阅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)
回答你的问题:
构造函数:
public ButtonGame() {
// All of your code goes here - except the static methods
}
您还应该使所有其他方法都是非静态的。
运行程序:
public static void main(String[] args) {
new ButtonGame();
}