Jframe aleatorio

Ola galera.
Tenho um app em java.
Onde tenho Jframes.
Frame1
Frame2
Frame3
Frame4
Frame_Start ( que é a principal)

No frame principal eu criei um botao chamado Baleatorio.
Eu queria que : quando eu clico no botao.
Ele abre os Frames , aleatorio , os 1,2,3 ou 4
, alguma ajuda?

Olá, tenho uma sugestão: Usar a classe java.util.Random e gerar números no intervalo de 1 a 4 e colocar um switch ou if para determinar qual frame será aberto.

Exemplo:

public static int nextInt(int min, int max) {

    Random rand = new Random();
    int randomNum = rand.nextInt((max - min) + 1) + min;

    return randomNum;
}

Outra opção é colocar os JFrames numa lista e, toda vez que for abrir um JFrame, embaralha a lista e pega o primeiro. Algo mais ou menos assim:

// adicionando os jframes
List<JFrame> lista = new ArrayList<>();
lista.add(new JFrame1());
lista.add(new JFrame2());
lista.add(new JFrame3());
lista.add(new JFrame4());


// pegando um JFrame aleatório
Collections.shuffle(lista);
JFrame selecionado = lista.get(0);
// faz o que quiser com o JFrame selecionado
selecionado.setVisible(true);

Abraço.

1 curtida

Acho que você pode fazer isso com Reflection.
Dê uma pesquisada sobre isso.

Isso! Obrigado!
Vc sabe como fazer para que todos os frames executem sem repetir?

Remova-o da lista após executa-lo.

Como? :frowning:

Com remove(). Você pode inclusive usá-lo no lugar do get:

// adicionando os jframes
List<JFrame> lista = new ArrayList<>();
lista.add(new JFrame1());
lista.add(new JFrame2());
lista.add(new JFrame3());
lista.add(new JFrame4());

// já que vai usar remove, verifica se há algo na lista antes de tentar remover
if(!lista.isEmpty()){
  // pegando um JFrame aleatório
  Collections.shuffle(lista);
  JFrame selecionado = lista.remove(0); // remove o JFrame e retorna o jframe removido
  // faz o que quiser com o JFrame selecionado
  selecionado.setVisible(true);
 }else{
 // lista está vazia, 
}

Recomendo você tirar um tempo para estudar coisas como listas.

Abraço.

1 curtida