• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nmarques

Problema com mouse listener

2 mensagens neste tópico

Olá pessoal!

Estou com vários trabalhos, e preciso acabar este de java.

O meu exercicio é este:

The applet called BoxMove draws a black box in the centre of the window

Each time the mouse is clicked above the box, the box is moved one box-height towards the top of the window   

Each time the mouse is clicked to the below the box, the box is moved one box-height towards the bottom of the window.

Ou seja:

Eu tenho uma caixa no meio da janela... Se eu clicar por cima da caixa ela move para cima(one box-height top) e se eu clicar por baixo dela ela irá para baixo(one box height bottom).

Eu tentei fazer, o meu problemá é que no meu, se eu clicar nao parte de cima/baixo da janela a "ira" para cima/baixo.

e neste é ligeiramente diferente...

Aqui vai o meu code:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.*;
import java.awt.BasicStroke;
import java.awt.geom.Ellipse2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Color;
import java.util.Random;




public class BoxMove extends Applet
{
Rectangle2D.Double r;


class ClickListener implements MouseListener
{
	public void mouseClicked(MouseEvent event)
	{
		int eventY=event.getY();


		if (eventY>getHeight()/2)
		{
			r.y=r.y + 10;
			repaint();
		}
		else
		{
			r.y=r.y - 10;
			repaint();
		}

	}


	public void mouseEntered(MouseEvent event){}
	public void mouseExited(MouseEvent event){}
	public void mousePressed(MouseEvent event){}
	public void mouseReleased(MouseEvent event){}
}

public BoxMove()
{

	}
	public void init()
	{
	// we make the rectangle here, because when init() is called, the window
	// is drawn, and so the getWidth() and getHeight() return sensible values
	r = new Rectangle2D.Double(getWidth()/2-10, getHeight()/2-5, 20, 10);
	addMouseListener(new ClickListener());
}
public void paint(Graphics g)
{
	Graphics2D g2 = (Graphics2D)g;

	g2.fill(r);

}


}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nmarques o problema não é com o mouse listener...o seu código compara a coordenada Y do rato e verifica se o click foi feito na metade superior ou inferior do espaço de trabalho.

Não entendi bem o problema mas parece que aquilo que é pedido é verificar se esse click foi feito acima/abaixo do rectângulo, por isso a comparação deverá ser feita entre as coordenadas do rato e as coordenadas do rectângulo.

/**
*
*	http://www.portugal-a-programar.pt/index.php?showtopic=17439
*
*/

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.Random;

import javax.swing.*;

public class BoxMove extends JApplet{

Rectangle2D.Double r;

	int mode = 1;
ButtonGroup bg;
	JRadioButton[] jrb = {new JRadioButton("case 0"), new JRadioButton("case 1")};

class ClickListener implements MouseListener{
	public void mouseClicked(MouseEvent event){

		int eventX=event.getX();
		int eventY=event.getY();

			switch(mode){
			case 0:
				if((eventX>r.x)&&(eventX<(r.x+r.getWidth()))){
					if(eventY>(r.y+r.getHeight())){
						r.y+=r.getHeight();
						repaint();
					}else if(eventY<r.y){
						r.y-=r.getHeight();
						repaint();
					}
				}
				break;
			case 1:
				if (eventY>getHeight()/2){
					r.y=r.y + 10;
					repaint();
				}else{
					r.y=r.y - 10;
					repaint();
				}
				break;
		}
	}

	public void mouseEntered(MouseEvent event){}
	public void mouseExited(MouseEvent event){}
	public void mousePressed(MouseEvent event){}
	public void mouseReleased(MouseEvent event){}
}

	class RadioClickListener implements ActionListener{
	public void actionPerformed(ActionEvent ae){
		if(ae.getActionCommand().equals("case 0")){
			mode = 0;
		}else if(ae.getActionCommand().equals("case 1")){
			mode = 1;
		}
	}
}
public BoxMove(){}
	public void init(){

	jrb[0].addActionListener(new RadioClickListener());
	jrb[1].addActionListener(new RadioClickListener());
	jrb[1].setSelected(true);

	bg = new ButtonGroup();
	bg.add(jrb[0]);
	bg.add(jrb[1]);

	getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
	getContentPane().add(jrb[0]);
	getContentPane().add(jrb[1]);

	addMouseListener(new ClickListener());
	// we make the rectangle here, because when init() is called, the window
	// is drawn, and so the getWidth() and getHeight() return sensible values
	r = new Rectangle2D.Double(getWidth()/2-10, getHeight()/2-5, 100, 50);
}

public void paint(Graphics g){

	Graphics2D g2 = (Graphics2D)g;
	super.paintComponents(g2);

	g2.setColor(Color.black);
	g2.fill(r);
	g2.setColor(Color.yellow);
	g2.setStroke(new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
	g2.draw(r);
	g2.setColor(Color.blue);
		g2.drawRect(0, (int)(getHeight()/2), getWidth(), 0);
}


}

Cumprimentos :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora