JButton не красится в моем JFrame.JFrame находится в цикле - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь создать какую-то дурацкую игру с кротом, и у меня установлен цикл JFrame, поэтому он каждую секунду создает JFrame в новом месте, но проблема в том, что мой JButton не будет загружаться во время этого процесса.Вот мой код:

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class WACKAMOLE {
private static JFrame frame;
private static JFrame frame1;
private static JButton button1;
private static int a;
private static int b;
private static int x = 0;
private static int score=0;

    public static void main(String args[]){
    Menu n=new Menu();
    n.Start();

}

static class Menu{

       public void Start(){
    frame=new JFrame();
    frame.setSize(150, 150);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    JPanel panel=new JPanel();
    JLabel label=new JLabel("Main Menu");
    JLabel label1=new JLabel("WACK A MOLE DELUXE");
    JButton button=new JButton("Start");
    JButton button1=new JButton("Highscores");
    panel.add(label1);
    panel.add(label);
    panel.add(button);
    panel.add(button1);
    frame.add(panel);
    frame.setVisible(true);
    button.addActionListener(new game());
    }
}

static class game implements ActionListener{
    public void actionPerformed(ActionEvent e){
        frame.dispose();
        Random generator=new Random();
        Random generator1=new Random();
        while(x<=30){
        a=generator.nextInt(1000);
        b=generator1.nextInt(1000);
        frame1=new JFrame("HEHE");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setSize(100,100);
        frame1.setLocation(a,b);
        frame1.setResizable(false);
        button1=new JButton("WACK ME!");
        button1.addActionListener(new clicked());
        frame1.setVisible(true);
        frame1.add(button1);
        frame1.setVisible(true);

        try{Thread.sleep(900);}
        catch(Exception e1){System.out.println("ERROR");}

        frame1.dispose();
        x++;
        }

    }

    static class clicked implements ActionListener{
        public void actionPerformed(ActionEvent e){
            frame1.dispose();
            x++;
            score++;

        }
    }

}

 }

1 Ответ

3 голосов
/ 22 ноября 2011

Если вы отключите поток отправки событий, все события и рисунки в графическом интерфейсе будут заблокированы. Вам нужно использовать фоновый поток для сна, а затем инициировать удаление кадра в EDT из фонового потока.

Прочитайте учебник о параллелизме в Swing .

...