/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
[Swing] Drag med flimmer
Fra : Kristian Thy


Dato : 18-10-04 00:26

Jeg er ved at udvikle et lille brætspils-program med Swing. Jeg har fået
lavet mig et bræt, som jeg viser i en JLayeredPane med brikkerne som
JLabels med ImageIcons ovenpå i forskellige lag.

Så kunne det jo være smart hvis man kunne trække brikkerne med musen, og
det har jeg også i princippet fået til at virke. Men der sker det
mærkelige når man trækker en brik, at den for hver anden pixel man
flytter den hopper det rigtige sted hen, mens den på de andre pixels
hopper et godt stykke væk fra cursoren - en 50-100 pixels både
horisontalt og vertikalt, oftest i retning mod (0,0).

Dette betyder så også at brikken kun flytter sig ca. halvdelen af den
afstand musen flytter sig.

Er der nogen der har oplevet noget lignende, og har en ide til hvad
problemet er? Jeg er fuldstændig stumped - det er første gang jeg prøver
at lave en interaktiv GUI i Java.

Koden er desværre lidt omfattende at poste i sin helhed, men her er
noget af det relevante:

-- Fra brættet:

public void mouseDragged(MouseEvent me){
   Piece p = (Piece)me.getComponent(); // p = den der blev trukket
   Point pos = p.getLocation();
   int dx = me.getX()-pos.x; // hvor meget trækker vi
   int dy = me.getY()-pos.y;
   p.select();
   Iterator i = ib.getPieces().iterator();
   while( i.hasNext() ){
       Piece pc = (Piece) i.next();
      if(pc.selected()) pc.translate(dx,dy);
   }
}

-- fra brikken:

public void translate(int dx, int dy){
   this.setLocation(this.getLocation().x+dx,this.getLocation().y+dy);
}

public boolean selected(){
   return selected;
}

public void select(){
   selected = true;
   this.setBorder(BorderFactory.createLineBorder(Color.red));
}
                     

Der kan være valgt flere brikker af gangen, og de skal allesammen rykkes
så langt som den ene brik her trækkes. Det virker fint, bortset fra at
alle de trukne brikker hopper, og de hopper ikke lige langt, ej heller i
samme retning.

--
-- [ kristian ] --------------------------------------------------------
--------------- [if( you->toppost() ) { killfilter->append( you ); }] --
--

 
 
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste