BEEE
Gebruiker
- Lid geworden
- 14 mrt 2011
- Berichten
- 62
Hallo,
Sinds een tijdje probeer ik Java te leren maar ik boek nog steeds niet zoveel vooruitgang.
Ik probeer nu een zeer eenvoudig tetrisspel te maken (omdat ik rekenmachines beu ben). In het begin lukte het me niet om de pijltjestoetsen aan de praat te krijgen. Om het te laten lukken heb ik de 'javax.swing' objecten achterwege gelaten omdat Netbeans steeds vertelde dat het niet 'static' was, ofzoiets en dus geen KeyListern kon gebruiken!?
Ik werk dus met Panel i.p.v. JPanel.
Nu wil ik dat min Frame uit 2 panels bestaat: pnl_basis die pnl_spel bevat. In de pnl_spel wil ik een 'rechthoek/blokje' laten verschijnen (Het echte spel).
Deze 'rechthoek' heb ik gedefineerd (denk ik toch) in een apparte class. Als ik op de Start_knop klik moet het blokje tevoorschijn komen... maar er gebeurt juist niets?
Wat doe ik fout? (Is mijn structuur van me programma gewoon fout? Gebruik van classes en subclassen?)
Mijn code:
Alvast bedankt!
BEEE
(Ik heb ook nog een kleine vraag, netbeans stelt vaak voor om @Override voor de gegeven 'void' te zetten, wat betekend dit? Bijvoorbeeld hier:
)
Sinds een tijdje probeer ik Java te leren maar ik boek nog steeds niet zoveel vooruitgang.
Ik probeer nu een zeer eenvoudig tetrisspel te maken (omdat ik rekenmachines beu ben). In het begin lukte het me niet om de pijltjestoetsen aan de praat te krijgen. Om het te laten lukken heb ik de 'javax.swing' objecten achterwege gelaten omdat Netbeans steeds vertelde dat het niet 'static' was, ofzoiets en dus geen KeyListern kon gebruiken!?
Ik werk dus met Panel i.p.v. JPanel.
Nu wil ik dat min Frame uit 2 panels bestaat: pnl_basis die pnl_spel bevat. In de pnl_spel wil ik een 'rechthoek/blokje' laten verschijnen (Het echte spel).
Deze 'rechthoek' heb ik gedefineerd (denk ik toch) in een apparte class. Als ik op de Start_knop klik moet het blokje tevoorschijn komen... maar er gebeurt juist niets?
Wat doe ik fout? (Is mijn structuur van me programma gewoon fout? Gebruik van classes en subclassen?)
Mijn code:
Code:
class BTetris extends Frame implements KeyListener
{
public static void main (String[]args ){ new BTetris ( "BTetris" ); }
Panel pnl_basis = new Panel();
Panel pnl_spel = new Panel();
int breedteblokje = 50;
Button Start_knop = new Button("Start");
int blok_nu = 0;
ArrayList<Rechthoek> Rechthoeken = new ArrayList<Rechthoek>();
public BTetris(String s ) {
super(s);
addKeyListener ( this ) ;
setSize ( 500,500 );
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Start_knop.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) { Starknop_click(); }});
//hier staat ook nog de 'layout' (die ik onder deze code zal zetten om duidelijkheid te houden, deze is hoofdzakelijk automatisch gegenereerd omdat ik een lay-out maken nog niet helemaal onder de knie heb. )
}
public void Starknop_click()
{
Rechthoeken.add(new Rechthoek(breedteblokje*5, 0, breedteblokje, Color.MAGENTA));
pnl_basis.add(Rechthoeken.get(0));
Rechthoeken.get(0).setVisible(true);
Rechthoeken.get(0).setFocusable(true);
Start_knop.setVisible(false); // dit gebeurt wel, de startknop gaat dus weg maar bovenstaande dingen gebeuren schijnbaar(?) niet
repaint(); // ook als ik dit probeer of
Rechthoeken.get(0).repaint(); // dit gebeurt er nog steeds niets...
}
static public class Rechthoek extends Panel
{
// Private variables
private int width;
private int height;
private int x;
private int y;
private Color color_;
public Rechthoek(int x, int y, int breedte_, Color kleur_) {
this.x = x;
this.y = y;
this.width = breedte_;
this.height = breedte_;
color_ = kleur_;
setBackground(color_);
setLocation(x,y);
this.repaint(); // ook dit helpt niet
}
public void Change (int x_, int y_, int breedte_, Color kleur_)
{
x = x_;
y = y_;
width = breedte_;
height = breedte_;
setBackground(kleur_);
repaint();
}
public int getWidth() { return width;}
public int getHeight() {return height;}
public int getBreedte() {return width;}
public int getX() {return x;}
public int getY() {return y;}
public void paintComponent(Graphics g) {
this.paintComponent(g);
g.setColor(color_);
g.drawRect(x, y, width, height);
repaint(); // en dit helpt ook niet
}
}
}
Code:
//Code weggelaten bij vorige code
pnl_basis.setBackground(new java.awt.Color(204, 204, 204));
javax.swing.GroupLayout panel2Layout = new javax.swing.GroupLayout(pnl_spel);
pnl_spel.setLayout(panel2Layout);
panel2Layout.setHorizontalGroup(
panel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel2Layout.createSequentialGroup()
.addComponent(Start_knop, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 314, Short.MAX_VALUE))
);
panel2Layout.setVerticalGroup(
panel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel2Layout.createSequentialGroup()
.addComponent(Start_knop, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 495, Short.MAX_VALUE))
);
javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(pnl_basis);
pnl_basis.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(pnl_spel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 307, Short.MAX_VALUE))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnl_spel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pnl_basis, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 840, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pnl_basis, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 551, Short.MAX_VALUE))
);
pack();
}
Alvast bedankt!
BEEE
(Ik heb ook nog een kleine vraag, netbeans stelt vaak voor om @Override voor de gegeven 'void' te zetten, wat betekend dit? Bijvoorbeeld hier:
Code:
Start_knop.addActionListener(new java.awt.event.ActionListener() {
@Override // is dit omdat je de standaard actie van de knop zult overschrijven of zoiets? Waarom helpt @Override dan ?
public void actionPerformed(java.awt.event.ActionEvent evt) { Starknop_click(); }});
Laatst bewerkt: