Dúvida sobre ação de JButton

3 respostas
el_loko_pepe

Estou tentando fazer um botão que faça uma variável andar sobre a matriz (por exemplo: está na posição 1,1 aperta baixo e vai para 0,1, ou [i-1][j])
Ou seja, eu queria que a ação do botão voltasse pra outro objeto pra que eu pudesse modificar a variável "posicao"
mas todos os exemplos que achei na internet o botão só responde pra ele mesmo(tipo uma calculadora que soma números e já mostra)...

Obs:Aproveitando o tópico se alguém souber como fazer pra deixar o usuário clicando(sem ter que abrir uma janela por vez) até "posicao" chegar num número qualquer que eu escolher agradeço também.

O código está assim:
import javax.swing.*;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.*;

public class Andador extends JFrame implements ActionListener {
	JLabel espaço1, espaço2, espaço3, espaço4;
	JButton botaoCima, botaoEsquerda, botaoBaixo, botaoDireita;

	public Andador() {
		setTitle("andador");
		setSize(250, 130);
		Container container = getContentPane();
		GridLayout grade = new GridLayout(3, 3);
		container.setLayout(grade);
		espaço1 = new JLabel("");
		espaço2 = new JLabel("");
		espaço3 = new JLabel("andador");
		espaço4 = new JLabel(" v.1.2");
		botaoCima = new JButton("^");
		botaoEsquerda = new JButton("<");
		botaoBaixo = new JButton("v");
		botaoDireita = new JButton(">");
		container.add(espaço1);
		container.add(botaoCima);
		container.add(espaço2);
		container.add(botaoEsquerda);
		container.add(botaoBaixo);
		container.add(botaoDireita);
		container.add(espaço3);
		container.add(espaço4);
		botaoCima.addActionListener(this);
		botaoEsquerda.addActionListener(this);
		botaoBaixo.addActionListener(this);
		botaoDireita.addActionListener(this);
	}

	public void actionPerformed (ActionEvent Evento) {

		if (Evento.getSource() == botaoCima) {

		}
		if (Evento.getSource() == botaoEsquerda) {

		}
		if (Evento.getSource() == botaoBaixo) {

		}
		if (Evento.getSource() == botaoDireita) {
			
		}
	}
}

3 Respostas

kritiuns

Brow você pode começar criando uma classe que armazena o x,y

class Objeto{
   private int x;
   private int y;


   //getters and setters
}

e no seu codigo fica

import javax.swing.*;   
import java.awt.Container;   
import java.awt.GridLayout;   
import java.awt.event.*;   
  
public class Andador extends JFrame implements ActionListener {   
    JLabel espaço1, espaço2, espaço3, espaço4;   
    JButton botaoCima, botaoEsquerda, botaoBaixo, botaoDireita;   
    Objeto obj;

    public Andador() {   
        setTitle("andador");   
        setSize(250, 130);   
        Container container = getContentPane();   
        GridLayout grade = new GridLayout(3, 3);   
        container.setLayout(grade);  
        obj = new Objeto();
        obj.setX(0);
        obj.setY(0);
        espaço1 = new JLabel("");   
        espaço2 = new JLabel("");   
        espaço3 = new JLabel("andador");   
        espaço4 = new JLabel(" v.1.2");   
        botaoCima = new JButton("^");   
        botaoEsquerda = new JButton("<");   
        botaoBaixo = new JButton("v");   
        botaoDireita = new JButton(">");   
        container.add(espaço1);   
        container.add(botaoCima);   
        container.add(espaço2);   
        container.add(botaoEsquerda);   
        container.add(botaoBaixo);   
        container.add(botaoDireita);   
        container.add(espaço3);   
        container.add(espaço4);   
        botaoCima.addActionListener(this);   
        botaoEsquerda.addActionListener(this);   
        botaoBaixo.addActionListener(this);   
        botaoDireita.addActionListener(this);   
    }   
  
    public void actionPerformed (ActionEvent Evento) {   
  
        if (Evento.getSource() == botaoCima) {   
              obj.setY(obj.getY() + 1 );
        }   
        if (Evento.getSource() == botaoEsquerda) {   
            obj.setX(obj.getX() - 1 );
        }   
        if (Evento.getSource() == botaoBaixo) {   
           obj.setY(obj.getY() - 1 );

        }   
        if (Evento.getSource() == botaoDireita) {   
               obj.setX(obj.getX() + 1 );
        }   
    }   
}

ai é só vc brincar ae ^^

Abraço.

ViniGodoy

Movido para o fórum de interface gráfica. Por favor, leia atentamente a descrição dos fóruns antes de postar.

el_loko_pepe
kritiuns , valeu pela ajuda, usei um set pra mudar o valor da variável, ficou assim:
public void actionPerformed (ActionEvent Evento) {
         
		if (Evento.getSource() == botaoCima) {
                Teste1.setPosicaoLinha(1);
			
		}
		if (Evento.getSource() == botaoEsquerda) {
	         Teste1.setPosicaoColuna(-1);  
			
		}
		if (Evento.getSource() == botaoBaixo) {
	        Teste1.setPosicaoLinha(-1);
		}
		if (Evento.getSource() == botaoDireita) {
	        Teste1.setPosicaoColuna(1);
Acontece o seguinte estou rodando um teste JUNIT que da true se a posição for tal.Ele começa na posição errada e o botão serviria pra ir mudando a posição, mas quando eu rodo o teste ele abre o botão e não faz nada independente do que eu clique. O código da classe Teste1 ta assim:
public boolean teste(int p) {
Andador janela = new Andador();
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setVisible(true);
    	while(localizacaoPessoa != matriz[0][1] && localizacaoPessoa != matriz[2][2]){
			linhaAtual = linhaAtual + movimentoLinha;
			colunaAtual = colunaAtual + movimentoColuna;
		}
if (localizacaoPessoa == matriz[0][1]) {
			fimTeste1 = true;
		}
if (localizacaoPessoa == matriz[2][2])
			fimTeste1 = true;
return fimTeste1;
}
 public static void setPosicaoLinha(int direcao){
		movimentoLinha = direcao;
    	
    }
    public static void setPosicaoColuna(int direcao){
		movimentoColuna = direcao;
    	
    }
}
Criado 23 de maio de 2011
Ultima resposta 25 de mai. de 2011
Respostas 3
Participantes 3