Rechthoek weergeven lukt niet

Status
Niet open voor verdere reacties.

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:

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:
@Override
wil zeggen dat je aan u de parent methode overschrijft en verandert hebt
dit is voor de compiler voor uzelf zodat je duidelijk ziet dat dit gebeurt maar is verplicht te gebruiken

zoals je
@deprecated
zal zetten om aan te duiden dat die functie in de tijd zal verdwijnen omdat er een beter alternatief is in je project en in opensource je anderen die je lib gebruiken niet onmiddelijk wil dwingen door hun code te laten vastlopen door het niet meer te ondersteunen

zie annotatie je kan er veel mee doen precompile ect

let op bij je actionlistener is het een interface dus net iets anders maar houd verband mee
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan