Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 22-03-2006, 14:47
Rob
Avatar van Rob
Rob is offline
Ik heb drie klassen: NewGameGUI, Playfield en Piece.
NewGameGUI zorgt ervoor dat er Playfield en Piece objecten worden gemaakt en dat deze op hun plek worden gezet.

In de Playfield klasse wordt paint() gewoon aangeroepen en wordt het bord netjes getekend.
In de Piece klasse, however, gebeurd dit niet.

Hier is de code van Piece.java (de rest boeit niet, want die werkt gewoon):
PHP-code:
package kwarto.test;

import java.awt.event.*;
import java.awt.*;

class 
Piece extends Canvas 
                   
implements MouseListener {
  private 
boolean hovergeselecteerd;
  private 
int piecexy;
  private 
Image img;
  
  public 
Piece(int pieceint xint y) {
    
this.piece piece;
    
this.newgamegui newgamegui;
    
this.x;
    
this.y;
    
    
geselecteerd false;
    
hover false

    
String binair Integer.toBinaryString(piece);
      
    if(
piece 8) {
          while(
binair.length() < 4) {
            
binair "0" binair;
          }
    } else {
      
binair binair;
    }
    
binair "D:/Robbert/Uni/p2/kwarto/test/" binair ".gif";
    
img Toolkit.getDefaultToolkit().getImage(binair);
    
    
MediaTracker mt = new MediaTracker(this);
    
mt.addImage(img,0);
    try{
           
mt.waitForID(0);
    }catch(
InterruptedException ie){
       ;
    }      
    
addMouseListener(this);
  }
  
  public 
void paint(Graphics g) {
    
//My program never arrives here, for some weird reason.
  
}

  
//Stuff that's not relevant

En er wordt een Piece object aangemaakt in NewGameGUI.java op de volgende manier:

PHP-code:
    //instantiate the array
    
whitePieces = new Piece[8];

    
//instantiate and add each piece to the panel
    
for(int i 08i++) {
      
whitePieces[i] = new Piece(ixy);
      
westPanel.add(whitePieces[i]);
    } 
Heeft er iemand enig idee waarom public void paint() niet aangeroepen wordt in Piece maar wel in Playfield (FYI: Playfield ziet er qua code opbouw ongeveer hetzelfde uit)?
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Advertentie
Oud 22-03-2006, 15:12
dext0r
Avatar van dext0r
dext0r is offline
ff uit het hoofdje: iets met super.paintComponent(Graphics g) ?


en euh, wat deed canvas precies?
en erft je playfield daar ook van over? of waar paint je je components? zo te zien niet op een jpanel
__________________
hoi
Met citaat reageren
Oud 22-03-2006, 15:31
Rob
Avatar van Rob
Rob is offline
Hoe zou ik die super dan toe moeten passen?

Eh, je moet canvas zien als een 'doek' waar je op kunt tekenen.
Playfield en Piece extended beide Canvas. Ik paint mijn components in de klasse zelf, als je dat soms bedoelt.

Bij Playfield werkt dat dus prima, maar bij Piece niet.

Hier is Playfield:

PHP-code:
package kwarto.test;

import java.awt.*;
import java.awt.event.*;

class 
Playfield extends Canvas {
  private 
Image img;  
    
    public 
Playfield() {
    
img Toolkit.getDefaultToolkit().getImage("D:/Robbert/Uni/p2/kwarto/images/playfield.gif");
    
MediaTracker mt = new MediaTracker(this);
    
mt.addImage(img,0);
    try{
           
mt.waitForID(0);
    }catch(
InterruptedException ie){
           ;
    }  
    }
  
    public 
void paint(Graphics g) {
        
g.drawImage(img11530530this);        
    
//System.out.println(g);
    
}

Deze doet het prima. Zoals je ziet is de globale opbouw hetzelfde als die van Piece. Dus waarom ie het niet doet, is mij een raadsel.

edit:

Als ik een Piece aanmaak (eentje maar, dus), en deze initialiseer met piece = new Piece(1, x, y, this); en die dan direct add mbv c.add(piece, BorderLayout.WEST);, pikt ie het ook niet. =\
en dan gaat het toch echt éxact hetzelfde als Playfield.
__________________
Bad spelling and grammar make me [sic].

Laatst gewijzigd op 22-03-2006 om 15:37.
Met citaat reageren
Oud 22-03-2006, 15:56
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
euhm ik weet niet of het aan mij ligt, maar die paint zou apart aangeroepen moeten worden omdat het gewoon een methode is van je class?
Accolades verkeerd staan misschien?
Met citaat reageren
Oud 22-03-2006, 16:03
Rob
Avatar van Rob
Rob is offline
Dan deed ie wel lastig.

Maaar. Als ik dit doe, doet ie 't:

PHP-code:
package kwarto.test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class 
Test extends JFrame {
  public 
Piece1[] piece1;
  
  public 
Test() {
    
super("Test GUI");
    
    
addWindowListener(new VensterHandler());
    
    
buildGUI();
    
    
setVisible(true);
  }

  
  public 
void buildGUI() {
    
setSize(800,600);   
    
Container c getContentPane();
    
    
piece1 = new Piece1[16];
    
int j;
    for(
int i 016i++) {
      if(
8){
        
8;
        
piece1[j] = new Piece1(j);
        
c.add(piece1[j], BorderLayout.CENTER);
        
8;
      } else {
        
piece1[i] = new Piece1(i);
        
c.add(piece1[i], BorderLayout.CENTER);
      }
    }
  }

  
//Zooi

en de code in Piece1.java:
PHP-code:
package kwarto.test;

import java.awt.event.*;
import java.awt.*;

class 
Piece1 extends Canvas {
  private 
int piecexy;
  private 
Image img;
  
NewGameGUI newgamegui;
  
Test test;
  
  public 
Piece1(int piece) {
  
    
this.piece piece;
    
//this.test = test;
    //this.x = x;
    //this.y = y;

    
System.out.println("Piece init!");
    
    
String binair Integer.toBinaryString(piece);
      
    if(
piece 8) {
          while(
binair.length() < 4) {
            
binair "0" binair;
          }
    } else {
      
binair binair;
    }
    
binair "D:/Robbert/Uni/p2/kwarto/test/" binair ".gif";
    
img Toolkit.getDefaultToolkit().getImage(binair);
    
    
MediaTracker mt = new MediaTracker(this);
    
mt.addImage(img,0);
    try{
           
mt.waitForID(0);
    }catch(
InterruptedException ie){
           ;
    }      
    
System.out.println("added mouselistener");
  }
  
    public 
void paint(Graphics g) {
        
g.drawImage(img11530530this);        
    }

Dan doet ie het (maar ik zie natuurlijk maar 1 steen). Zodra ik met JPanels ga kloten, doet ie moeilijk. Dan doe ik dit:

PHP-code:
    JPanel westPanel = new JPanel(new GridLayout(8,2));
    
Container c getContentPane();
    
    
piece1 = new Piece1[16];
    
int j;
    for(
int i 016i++) {
      
JPanel piecePanel = new JPanel(new FlowLayout());
      if(
8){
        
8;
        
piece1[j] = new Piece1(j);
        
piecePanel.add(piece1[j], BorderLayout.CENTER);
        
8;
      } else {
        
piece1[i] = new Piece1(i);
        
piecePanel.add(piece1[i], BorderLayout.CENTER);
      }
      
westPanel.add(piecePanel);
    }
    
    
Container c getContentPane();
    
c.add(westPanelBorderLayout.WEST); 
Moet ik dan een aparte klasse definiëren die JPanel en Canvas extend en dan daar op tekenen, ofzo? Of kan dit simpler?
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Oud 22-03-2006, 17:01
dext0r
Avatar van dext0r
dext0r is offline
Citaat:
Rob schreef op 22-03-2006 @ 17:03 :

Moet ik dan een aparte klasse definiëren die JPanel en Canvas extend
2 x extenden mag niet hé , java

overigens, ik heb altijd gewoon geleerd om rechtstreeks op me JPanel te plempen? ik heb nooit met canvas gewerkt.
t voorbeeldje wat wij hadden was dan een vector volduwen met wat figuurtjes, een teken functie aanroepen die die vector op je JPanel weergaf, en vervolgens had je nog een mouselistener om leuke stipjes te kunnen tekenen .
nu weet ik niet precies wat jou programma moet/gaat doen. maar is het net zoiets?
ik weet niet of ik nu al je hier geposte code kan gebruiken om zelf ook een running project te maken, dan kan ik zo es kijken op me laptop, want ik heb hier geen eclipse
__________________
hoi

Laatst gewijzigd op 22-03-2006 om 17:03.
Met citaat reageren
Oud 22-03-2006, 17:16
Rob
Avatar van Rob
Rob is offline
Citaat:
dext0r schreef op 22-03-2006 @ 18:01 :
2 x extenden mag niet hé , java

overigens, ik heb altijd gewoon geleerd om rechtstreeks op me JPanel te plempen? ik heb nooit met canvas gewerkt.
t voorbeeldje wat wij hadden was dan een vector volduwen met wat figuurtjes, een teken functie aanroepen die die vector op je JPanel weergaf, en vervolgens had je nog een mouselistener om leuke stipjes te kunnen tekenen .
nu weet ik niet precies wat jou programma moet/gaat doen. maar is het net zoiets?
ik weet niet of ik nu al je hier geposte code kan gebruiken om zelf ook een running project te maken, dan kan ik zo es kijken op me laptop, want ik heb hier geen eclipse
Helaas mag dat niet, nee. -_-'

Nee. Wij moeten een spel programmeren (Kwarto).

Het is nu wel gelukt, trouwens. Ik heb een aparte klasse (Draw) gemaakt die het drawen van de images in kwestie afhandelt. Nu wordt de functionaliteit van de steen dus gerepresenteerd door de Piece klasse en het tekenen van alles wordt door Draw geregeld.

Nu implement Piece dus MouseListener. Nu heb ik bijvoorbeeld dit (in Piece.java):

PHP-code:
  public void mouseEntered(MouseEvent e) {
  
  } 
Hier wil ik dus een aparte methode (die in Draw zit ;D) aanroepen die een rechthoek om het geselecteerde stuk tekent. Dat is toch wel mogelijk? Alsjeblieft, zeg me dat dit mogelijk is. >.>
__________________
Bad spelling and grammar make me [sic].

Laatst gewijzigd op 22-03-2006 om 17:29.
Met citaat reageren
Oud 22-03-2006, 17:29
dext0r
Avatar van dext0r
dext0r is offline
daar rollen toch een paar x,y waarden uit ? die mouseEntered? wat zegt de API daarover?

maar moet opzich te doen zijn?

oplossing met aparte klasse Draw is dan wel weer netjes OO
__________________
hoi
Met citaat reageren
Oud 22-03-2006, 18:04
Rob
Avatar van Rob
Rob is offline
Citaat:
dext0r schreef op 22-03-2006 @ 18:29 :
daar rollen toch een paar x,y waarden uit ? die mouseEntered? wat zegt de API daarover?

maar moet opzich te doen zijn?

oplossing met aparte klasse Draw is dan wel weer netjes OO
Hm. Is wel te doen, ja. Het gaat dus nu zo worden: Draw implement ook de mouselistener, en dan zie je netjes over welke je hovered en klikt en welke geselect is. Dat moet makkelijk kunnen met repaint() of update(), dan.

Dan is het zo: de GUI maakt alles aan, Piece modelleert de 4 eigenschappen van de stenen, en Draw houdt bij of ze geselecteerd zijn, of je erover hovered of niet en tekent de juiste status aan de hand daarvan?
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 06:19.