Imagens de uma pasta em um Array

4 respostas
javaarraylist
M

Boa tarde pessoal do GUJ, estou com uma dificuldade em um projeto que estou realizando. Estou criando um jogo da memoria que a intenção é mostrar as imagens nos botões e quando se encontra duas imagens iguais elas ficam visíveis (jogo normal). Ate então eu consegui toda a estrutura do jogo, porem não estou conseguindo colocar os botões com imagens. Meu pensamento é pegar uma pasta com as imagens, jogar essas imagens em um Array e depois colocar essas imagens no jogo. abaixo segue parte do código que cria o botão.

for(i = 0; i < (qtPares * 2); i++){
        //Quantidade de controladores
        if(i % 2 == 0){
            j++;
            controle = new ControleBotoesSelecionados();
            
            ArrayList listaNomes = new ArrayList<>();
            
            
            controle.setNmBotao("B" + j);
            this.listaControle.add(controle);
        }
        
        
        JButton botao = new JButton("Jogo");
        //colocar os botoes na tela
        this.painel.add(botao);
        botao.addActionListener(this.acaoBotoes);
        int pos = rand.nextInt(((posicionamentos.size()-1) > 0)? posicionamentos.size()-1 : 1);
        botao.setBounds(posicionamentos.get(pos));
        posicionamentos.remove(pos);
                
        
        controle.adicionarBotao(botao);
    }

Alguém sabe como posso colocar imagem ao invés de ficar apenas no B + “algum numero”?

Observação: já realizei pesquisas sobre esse assunto, inclusive aqui no GUJ, porem não achei nada que conseguisse encaixar no projeto.

4 Respostas

4

O botão deve ser mostrado apenas quando clicado sobre ele, como um jogo de memória normal, logo deve aparecer em um evento ActionEvent (sem surpresas).

Eu recomendo q vc desenvolva uma matriz de ImageIcon[][], Essa matriz sera responsável por separar aleatoriamente um par de imagens iguais, desta forma, os botões serão rotulados com o índice que ele abrirá, exemplo:

O jButton1 abre a linha 0 na coluna 1, logo a imagem q será setada será: jButton1.setIcon(ImageIcon[0][1]).

Um método também deverá ser adicionado. Ele será responsável por identificar quando a segunda imagem for revelada, e fara o teste: ImageIcon[?][?] == ImageIcon[?][?]. Caso for mantem revelado e deixa invisivel o botão, caso n for seta o imageIcon do botão como null.

É desta forma q montaria, com botões fixos. Caso vc quer criar um conjunto de botões dinâmicos, é um pouquinho mais complicado para identificar o botão clicado, mas nada impossível.

Eu tenho esta aplicação e espero q ajude, ela cria botões em ordem, e com valores aleatórios, a ideia da aplicação era q estava testando a criação de botões dentro de uma GridLayout.
GridLayout.rar (27.1 KB)

M

Bom dia 4mega.
Então, a forma de se colocar os botões já foi criado, elas estão sendo colocadas dinamicamente. O que eu preciso é uma forma de colocar nos botões, ao invés de palavra, imagens que estão em uma determinada pasta.

4

Então, vc n precisa armazenar as imagens nos botões, e sim armazenar o ID os botões, o ID é composto por X e Y de uma matriz de imagens, e nesta matriz de imagens cada uma possuirá o URL de acesso a imagem ha sua pasta, exemplo:

ImageIcon img = new ImageIcon("C:\\ [coloque o local aqui]\ imagem1.png");

Vc irá popular a matriz passando por um FOR antes da definição dos botões, e ela deverá popular a matriz de forma randômica, obvio.

M

Desculpa 4mega, mas ainda não entendi como faria isso.
eu tenho esta parte do código que coloca o texto nos botões:
if(i % 2 == 0){
j++;
controle = new ControleBotoesSelecionados();

controle.setNmBotao("B" + j);
            this.listaControle.add(controle);
        }

setNmBotao

public void setNmBotao(String nmBotao) {
this.nmBotao = nmBotao;
}

Criado 3 de novembro de 2016
Ultima resposta 4 de nov. de 2016
Respostas 4
Participantes 2