2013-01-22, 17:48
  #1
Medlem
Hejsan!

Har suttigt och klurat ett tag på hur jag ska kunna byta plats på två knappar i min GridLayout. Det jag ska göra är att jag har ett rutnät med nummer och när man trycker på ett nummer som ligger brevid en blank knapp ska dessa två byta plats.

Så ser det ut: https://dl.dropbox.com/u/5203120/15-game.JPG

Den mest lyckade lösningen funkar vertikalt, men horisontellt hopper den lite som den vill.
Cell är en egenskriven subklass till JButton.

Kod:
    private void moveClicked(Cell clickedCell){
        
        Container contentPane = frame.getContentPane();
        int clickedY = clickedCell.getYpos();
        int clickedX = clickedCell.getXpos();
        int clickedIndex = clickedY*clickedX-1;
        int emptyIndex = empty.getYpos()*empty.getXpos()-1;
        contentPane.setComponentZOrder(empty, clickedIndex);
        contentPane.setComponentZOrder(clickedCell, emptyIndex);
        clickedCell.movePos(empty.getXpos(), empty.getYpos());
        empty.movePos(clickedX, clickedY);
        contentPane.revalidate();
        
    }

movePos ändrar bara några värden i classen, den kan ni typ ignorera.
Säg till om jag missat att ta med något vesäntligt!
Citera
2013-01-22, 20:31
  #2
Medlem
dethalvabarnets avatar
Byt plats på dom såhär tro?
Dock så måste du förstås kolla om draget är tillåtet först i en annan metod före du gör denna men jag antar att du redan tänkt på detta.

Kod:
private void moveClicked(Cell clickedCell){
        
Container contentPane frame.getContentPane();
        
int clickedIndex contentPane.getComponentZOrder(clickedCell);
        
int emptyIndex contentPane.getComponentZOrder(empty);
        
contentPane.setComponentZOrder(empty, clickedIndex);
        
contentPane.setComponentZOrder(clickedCellemptyIndex);
        
contentPane.revalidate();
    } 
Citera
2013-01-22, 22:18
  #3
Medlem
Japp funka perfekt, har ingen aning om varför jag inte gjorde som du kom på xD men tackar för hjälpen

Citat:
Dock så måste du förstås kolla om draget är tillåtet först i en annan metod före du gör denna men jag antar att du redan tänkt på detta.
Japp, det gör jag :P
Citera
2013-01-22, 22:57
  #4
Medlem
dethalvabarnets avatar
Citat:
Ursprungligen postat av SiXoS
...
Varsågod.
Citera
2013-01-27, 17:46
  #5
Medlem
Citat:
Ursprungligen postat av SiXoS
Har suttigt och klurat ett tag på hur jag ska kunna byta plats på två knappar i min GridLayout. Det jag ska göra är att jag har ett rutnät med nummer och när man trycker på ett nummer som ligger brevid en blank knapp ska dessa två byta plats.

Byt inte plats på knapparna, byt bara text och värden på de. Byter du "fysiskt" plats på de måste säkerligen hela komponenten ritas om och massa värden för bounds etc måste räknas om, och det ger inget mer än att bara byta texten.

Mycket snabbare och enklare att bara byta texten och ditt spel (eller vad du nu gör) ska bara kolla texten eller något annat värde (som också byts då naturligtvis) och inte kolla knapp-objekten eller dyl.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in