Avatar billede palle1976 Nybegynder
18. marts 2003 - 11:42 Der er 3 kommentarer og
1 løsning

Annulering af mousePressed

Jeg er ved at lave et program som kan generere landkort, men jeg er rendt i et lille problem. Når funktionen aktiveres kaldes metoden mousePressed(MouseEvent mouseEvent); Programmet begynder herefter med at generere kort, men hvis der trykkes flere gange inden kortet er færdiggenereret begynder programmet med at generere flere kort inden det første er færdigt. Mit spørgsmål er så hvordan jeg kan annulere kaldene til mousePressed(MouseEvent mouseEvent); når programmet er ved at generere kort ?? Jeg har prøvet at lave en global boolean variabel som metoden tjekker inden den begynder kortgenereringen, hvis den er false begynder den med at generere og sætter variablen til true. Inden den går ud af metoden sættes variablen igen til false. Men det viser sig at variablen altid er false når metoden kaldes...
Avatar billede magoo20000 Nybegynder
18. marts 2003 - 12:10 #1
Det lyder meget underligt.. Er denne variabel det første du sætter i din eventhandler metode? Har du en kodestump?
Avatar billede palle1976 Nybegynder
18. marts 2003 - 12:15 #2
Variablen sættes første gang når appletten startes til false. Herefter bliver der oprettet en instans af klassen MouseMotionAdapter som indeholder den følgende metode:

public void mousePressed(MouseEvent mouseEvent) {
       
        if (! genereteMap) {
         
          genereteMap = true;
         
          try{
            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            URL url = new URL("http://www.xxx.servlet");
            URLConnection con = url.openConnection();

            double x = (((double)mouseEvent.getX() * degreesPerPixelX) + map.getNegX());
            double y = ((((double)mouseEvent.getY() * degreesPerPixelY) - map.getPosY()) * -1);
            AppletOut ao2 = new AppletOut(x, y, zoomFactor, "", "");
           
            writeToServlet(con, ao2);
            ServletOut so2 = readFromServlet(con);
            makeMap(so2);
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            genereteMap = false;
          }
          catch(IOException ioe){
            System.out.println("IOException: Constructor");
            ioe.printStackTrace();
          }

        }
Avatar billede viht Nybegynder
18. marts 2003 - 12:16 #3
Bolske flag er never the way to go imo :)

Jeg ville fjerne mouselisteneren når metoden starter og så bare lade metoden komme mouselisteneren på igen, når den er færdig:

...
MouseListener ml = panel.getMouseListeners()[0];
generate(ml);
...

private void generate(MouseListener listener) {
  panel.removeMouseListener(ml);
  ...// arbejd på kort
  panel.addMouseListener(ml);
}
Avatar billede palle1976 Nybegynder
23. juni 2003 - 15:05 #4
er lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester