Hallo,
Ik heb voor school de opdracht gekregen een schuifpuzzel te maken in Java.
*knip*
Nu heb ik al een aantal dingen:
SchuifPuzzel.class:
Hierin wordt het scherm opgebouwd en moet het echte schuifwerk gebeuren.
Buttonlistener.class:
Spreekt voor zich lijkt mij.
Vakjes.class:
Dit zijn de vak objecten waar ik de rij en kolom uit ophaal.
Het probleem is het volgende. Zoals jullie zien probeer ik te repainten, maar dit werkt niet wanneer ik op een knop druk, maar alleen wanneer ik de puzzel bedek met een ander scherm en hem dan weer tevoorschijn haal.
Dit is niet het enige. Want ipv dat de knop verplaatst wordt naar het lege vlak, wordt de knop verwijderd en schuiven de knoppen gewoon een plaats op. Een voorbeeld:
Start:



En dan kan ik nu alleen nog op 15 drukken, welke dan ook verwijderd wordt. En dan kan ik niks meer. Mijn vraag is dus of jullie mij verder kunnen helpen aangezien dit 1 van de 3 vakken is die ik moet halen voor mijn P...
Alvast bedankt
*knip*
Ik heb voor school de opdracht gekregen een schuifpuzzel te maken in Java.
*knip*
Nu heb ik al een aantal dingen:
SchuifPuzzel.class:
Hierin wordt het scherm opgebouwd en moet het echte schuifwerk gebeuren.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| package SchuifPuzzel; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class SchuifPuzzel extends JFrame { //Aanmaken/Declareren static int aantalKnoppen = 16; static int kolommen = (int) Math.sqrt((double) aantalKnoppen); static int rijen = kolommen; static protected JButton[][] buttons = new JButton[rijen+1][kolommen+1]; static ButtonListener btListener = new ButtonListener(); static SchuifPuzzel frame; public Container container = getContentPane(); public Vak[][] vakjes = new Vak[rijen+1][kolommen+1]; public int button = 0; public JPanel panel = new JPanel(); /** Aanmaken SchuifPuzzel frame **/ public SchuifPuzzel() { //Layout bepalen container.add(panel); panel.setLayout(new GridLayout(rijen, kolommen)); //Knoppen toevoegen for(int rij=1;rij<=rijen;rij++){ for(int kolom=1;kolom<=kolommen;kolom++){ button++; if(button==16){ vakjes[rij][kolom] = new Vak(rij,kolom); button=0; break; } else{ buttons[rij][kolom] = new JButton(""+button); panel.add(buttons[rij][kolom]); buttons[rij][kolom].setBackground(Color.white); buttons[rij][kolom].addActionListener(btListener); vakjes[rij][kolom] = new Vak(rij,kolom); } } } } /** Main method */ public static void main(String[] args) { frame = new SchuifPuzzel(); frame.setTitle("Schuifpuzzel"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setVisible(true); } /** Methode om knoppen te verplaatsen **/ public void switchKnop(Vak vak){ for(int rij=1;rij<=rijen;rij++){ for(int kolom=1;kolom<=kolommen;kolom++){ //Lege plek zoeken if(buttons[rij][kolom]==null){ //Locaties bepalen int vorigeRij = vakjes[rij][kolom].rij; //Rij van lege vak int vorigeKolom = vakjes[rij][kolom].kolom; //Kolom van lege vak int huidigeRij = vak.rij; //Rij van gedrukte knop int huidigeKolom = vak.kolom; //Kolom van gedrukte knop //Kijken of knop verplaatst kan worden if(vorigeRij==huidigeRij){ if(Math.abs(vorigeKolom-huidigeKolom)==1){ //Verwijderen knop panel.remove(buttons[huidigeRij][huidigeKolom]); //Overgeven object buttons[vorigeRij][vorigeKolom] = buttons[huidigeRij][huidigeKolom]; //Toevoegen knop op lege plek panel.add(buttons[vorigeRij][vorigeKolom]); //Object verwijderen buttons[huidigeRij][huidigeKolom] = null; //Repainten van het paneel panel.repaint(); } } if(vorigeKolom==huidigeKolom){ if(Math.abs(vorigeRij-huidigeRij)==1){ //Verwijderen knop panel.remove(buttons[huidigeRij][huidigeKolom]); //Overgeven object buttons[vorigeRij][vorigeKolom] = buttons[huidigeRij][huidigeKolom]; //Toevoegen knop op lege plek panel.add(buttons[vorigeRij][vorigeKolom]); //Object verwijderen buttons[huidigeRij][huidigeKolom] = null; //Repainten van het paneel panel.repaint(); } } } } } } } |
Buttonlistener.class:
Spreekt voor zich lijkt mij.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| package SchuifPuzzel; import java.awt.event.*; import javax.swing.*; import java.awt.*; class ButtonListener extends SchuifPuzzel implements ActionListener{ public void actionPerformed(ActionEvent e) { //Meegroeiende buttonlistener for(int i=1;i<=rijen;i++){ for(int j=1;j<=kolommen;j++){ if(e.getSource()==buttons[i][j]) switchKnop(vakjes[i][j]); } } } } |
Vakjes.class:
Dit zijn de vak objecten waar ik de rij en kolom uit ophaal.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package SchuifPuzzel; /** Object met eigenschappen van een vakje **/ public class Vak{ public int rij; public int kolom; public boolean empty= false; //Opslaan locatie public Vak(int rij, int kolom){ this.rij=rij; this.kolom=kolom; } } |
Het probleem is het volgende. Zoals jullie zien probeer ik te repainten, maar dit werkt niet wanneer ik op een knop druk, maar alleen wanneer ik de puzzel bedek met een ander scherm en hem dan weer tevoorschijn haal.
Dit is niet het enige. Want ipv dat de knop verplaatst wordt naar het lege vlak, wordt de knop verwijderd en schuiven de knoppen gewoon een plaats op. Een voorbeeld:
Start:



En dan kan ik nu alleen nog op 15 drukken, welke dan ook verwijderd wordt. En dan kan ik niks meer. Mijn vraag is dus of jullie mij verder kunnen helpen aangezien dit 1 van de 3 vakken is die ik moet halen voor mijn P...
Alvast bedankt
*knip*
[ Voor 1% gewijzigd door Creepy op 04-06-2007 19:38 . Reden: code=java. Syntax highlighting FTW \0/ ]