VenomGameworld
Legacy Member
Hey,
Voor een taak voor school ben ik bezig met een AWT applet. Het is de bedoeling in een Canvas figuren te genereren dus deze kan vrij groot worden. Vandaar dat hij in een ScrollPane zit. Het probleem is echter, wanneer ik schuif met de schuifbalken, de repaint() opnieuw wordt opgeroepen en alles er redelijk fucked up uitziet.
Dit is de code van de hoofdklasse van de applet (lay-out: MVC)
Dit is de paint-methode van de Canvas Tekengebied:
Zoals je ziet, werk ik hier met willekeurige waardes. Ik zou bijgevolgd niet graag de event in 2 opsplitsen om te zien welke repaint() er is opgeroepen (die van het setten van de boolean tekenen of die van de schuifbalk).
Is er geen efficiënte manier om dit op te lossen?
Bij voorbaat dank!
Voor een taak voor school ben ik bezig met een AWT applet. Het is de bedoeling in een Canvas figuren te genereren dus deze kan vrij groot worden. Vandaar dat hij in een ScrollPane zit. Het probleem is echter, wanneer ik schuif met de schuifbalken, de repaint() opnieuw wordt opgeroepen en alles er redelijk fucked up uitziet.
Dit is de code van de hoofdklasse van de applet (lay-out: MVC)
Code:
public void init() {
setSize(430,450);
setLayout(new GridLayout(2,1));
tekenvel = new Tekengebied();
paneelKeuzes = new Controller(tekenvel);
add(paneelKeuzes);
scrollpane = new ScrollPane();
scrollpane.add(tekenvel);
add(scrollpane);
}
Dit is de paint-methode van de Canvas Tekengebied:
Code:
public void paint(Graphics g) {
//Zodat er niet meteen bij het opstarten wordt getekend
if(tekenen) {
//Aantal items in de kleur-array
lengte = kleur.length;
//Teller die we zullen doorlopen om een kleur uit de geselecteerde
//kleuren te kiezen
teller = 0;
for(int i = 0;i < aantal;i++) {
//Willekeurige waarde voor X tussen 1 en 800
random = (int)(801 * Math.random() + 1);
x = random;
//Willekeurige waarde voor Y tussen 1 en 600
random = (int)(601 * Math.random() + 1);
y = random;
//Index van een geselecteerde kleur opvragen via array
kleuren = kleur[teller];
//We laten de teller altijd tellen van 0 tot de de max van de array
//Als we de max bereiken, zettem we hem terug op 0
//en beginnen we opnieuw
if(teller == (lengte - 1)) {
teller = 0;
} else {
teller++;
}
//Integer "kleuren" gebruiken als index voor de array met de kleuren
//en de kleur als actieve kleur zetten
g.setColor((Color)(kleurRij[kleuren]));
if(vorm == "cirkel") {
g.fillOval(x,y,formaat,formaat);
} else {
g.fillRect(x,y,formaat,formaat);
}
}
}
}
Zoals je ziet, werk ik hier met willekeurige waardes. Ik zou bijgevolgd niet graag de event in 2 opsplitsen om te zien welke repaint() er is opgeroepen (die van het setten van de boolean tekenen of die van de schuifbalk).
Is er geen efficiënte manier om dit op te lossen?
Bij voorbaat dank!
