PDA

Visualizza la versione completa : [JAVA] Eventi che non si verificano


stirkland
10-03-2006, 18:47
heil ragassi pare ultimamente che gli eventi siano in sciopero, parlo di MouseMotionListener e ComponentListener...vi spiego:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.LinkedList;
import java.util.Iterator;

public class TerraceGraphic extends JPanel{
private LinkedList pointsList;
private double xScale,yScale;
private boolean paint;

public TerraceGraphic(){
addMouseListener(new MListener());
addMouseMotionListener(new MMotionListener());
addComponentListener(new CListener());

pointsList=new LinkedList();
paint=false;
}

public class CListener implements ComponentListener{
public void componentHidden(ComponentEvent e){}
public void componentMoved(ComponentEvent e){}
public void componentResized(ComponentEvent e){}

public void componentShown(ComponentEvent e){
xScale=getWidth()/Constants.GRID_WIDTH;
yScale=getHeight()/Constants.GRID_HEIGHT;
repaint();
}
}

public class MListener implements MouseListener{
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}

public void mousePressed(MouseEvent e) {
button=e.getButton();
Point point=new Point((int)(e.getX()/xScale),(int)(e.getY()/ yScale));

paint = true;
pointsList.clear();
pointsList.add(point);
}
}

public class MMotionListener implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {
button=e.getButton();
Point point=new Point((int)(e.getX()/xScale),(int)(e.getY()/yScale));

pointsList.clear();
pointsList.add(point);

repaint();
}

public void mouseMoved(MouseEvent e){}
}

public void paint(Graphics g){
super.paint(g);

Graphics2D g2D=(Graphics2D)g;
setScale(g2D);

if (paint){
if (button==MouseEvent.BUTTON1){
drawPoint((Point)pointsList.get(0));//funz.gia definita
}
if (button==MouseEvent.BUTTON3){
cleanPoint((Point)pointsList.get(0));//funz.gia definita
}
}
}
}

allora...non verificandosi l'evento ComponentListener non posso avere i fattori di scala! non funziona se xScale e yScale le assegno nel costruttore, perch getWidth() e getHeight() ritornerebbero zero;
e poi come vedete il codice di MouseMotionListener uguale a quello di MouseListener...ma non va!! se clicco su un punto del grafico mi disegna il quadratino, ma in trascinamento non mi disegna proprio nulla...per almento quest'evento si verifica, ho fatto dei test, non come ComponentListener che invece fa il dormiente!!! :dh:

ho voluto usare un LinkedList per contenere i punti perch in altri usi di MouseMotionListener ho bisogno di sapere tutti i punti di una certa funzione, per poter disegnare linee rette, cerchi e rettangoli...come un programma di disegno!

bene bene...ora...aiutooo!!!! :bh: :master:

stirkland
10-03-2006, 18:54
ah dimenticavo...questo oggetto contenuto in un altro oggetto Jpanel...che contenuto in un JTabbedPane....che contenuto in un normale JFrame!! ufff... :fagiano: !!!

stirkland
10-03-2006, 19:44
OK GENTE!!! ho capito la faccenda del MouseMotionListener... si trattava della riga
button=e.getButton();
che ha un significato diverso da MouseListener!!
ora mi rimane da capire come mai ComponentListener dorme... :master:

stirkland
11-03-2006, 16:28
vi pregoooooo!!! :cry:

Loading