problemen met setDelay()

Status
Niet open voor verdere reacties.

blackarrow123

Nieuwe gebruiker
Lid geworden
30 jun 2012
Berichten
2
Hallo, ik zit met een probleem. Het programma laat dus een bal heen en weer botsen over het scherm en met de knoppen up en down gaat hij op en neer. Dit werkt allemaal. Maar de oefening erachter was dit uit te breiden met een versnel en vertraagknop, faster en slower. Maar ik merk geen verschil als ik op de knoppen druk, ik denk dat mijn variabele ww ( integer) niet in de setDelay() instructie geraakt buiten de eerste keer. Weet er iemand wat er verkeerd is ? Dit zijn de 3 klassen. Het komt uit het boek Java de basis door Andree Hollander, oef 4.7. Ik ben al uren aan het zoeken en word er wanhopig van. Alvast bedankt !!

class 1 :

package h04;

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

public class AutoBal4Opstart extends JFrame
{
private JButton naarlinks, naarrechts, naarboven,naarbeneden ;
AutoBal4 bal;

public AutoBal4Opstart()
{
JFrame venster = new JFrame();
venster.setLayout(new BorderLayout());
venster.setSize(700,400);
venster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
venster.setTitle("auto bal 4");
venster.setLocation(100, 100);
bal = new AutoBal4();
venster.add(bal, BorderLayout.CENTER);
AutoBal4Bediening bedieningspaneel;
bedieningspaneel = new AutoBal4Bediening(bal);
venster.add(bedieningspaneel, BorderLayout.SOUTH);
venster.setVisible(true);
}

public static void main( String [ ] args)
{
new AutoBal4Opstart();
}
}

class 2 :

package h04;

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

public class AutoBal4Bediening extends JPanel implements ActionListener
{
private JButton wissel;
private JButton up, down, faster, slower;
AutoBal4 bal;

public AutoBal4Bediening(AutoBal4 bal)
{
this.bal = bal;
wissel = new JButton("wissel van richting");
wissel.addActionListener(this);
add(wissel);
up = new JButton("up");
up.addActionListener(this);
down = new JButton("down");
down.addActionListener(this);
faster = new JButton("faster");
faster.addActionListener(this);
slower = new JButton("slower");
slower.addActionListener(this);
add(up);
add(down);
add(faster);
add(slower);
JTextField delay = new JTextField(3);
add(delay);

}

public void actionPerformed(ActionEvent e)
{
if (e.getSource() == wissel)
{
bal.setres(- bal.getres());

}
else if (e.getSource() == down)
{
bal.setVerplaats(bal.getverplaats() +2);
}
else if (e.getSource()== up)
{
bal.setVerplaats(bal.getverplaats() -2);
}
else if (e.getSource()== faster)
{
bal.setspeed((bal.getspeed()/10));
}
else if (e.getSource()== slower);
{
bal.setspeed((bal.getspeed()*10));
}
}
}

class 3 :

package h04;

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


public class AutoBal4 extends JPanel implements ActionListener
{
private int horizontaleplaats = 250;
private int verticaleplaats = 150;
private int res = +1;
private int ww = 30;

public int getspeed()
{
return ww;
}

public int getHorplaats()
{
return horizontaleplaats;
}

public int getverplaats()
{
return verticaleplaats;
}

public int getres()
{
return res;
}


public void setHorplaats(int nhp)
{
horizontaleplaats = nhp;
}

public void setVerplaats(int nvp)
{
verticaleplaats = nvp;
}
public void setres( int nres)
{
res = nres;
}

public void setspeed(int w)
{
ww = w;
}

public AutoBal4()
{
javax.swing.Timer autoklik = new javax.swing.Timer(20, this);
autoklik.start();
autoklik.setDelay(ww);
}

public void actionPerformed(ActionEvent e)
{
setHorplaats(getHorplaats()+res);
if ((horizontaleplaats<=0) || (horizontaleplaats>=(getWidth()-100)))
{
res = -res;
}
repaint();
}

public void paintComponent( Graphics g)
{
super.paintComponent(g);
final int baldia = 100;
g.setColor(Color.ORANGE);
g.fillOval(horizontaleplaats,verticaleplaats, baldia, baldia);
g.setColor(Color.BLACK);
g.drawOval(horizontaleplaats,verticaleplaats, baldia, baldia);
g.drawOval(horizontaleplaats + baldia / 4 ,verticaleplaats, baldia/2, baldia);
}

}
 
gelieve codetags te gebruiken
zie # in editor venster

volgende zal je moeten bekijken
Code:
	public void actionPerformed(ActionEvent e) {
		setHorplaats(getHorplaats() + res);
		if ((horizontaleplaats <= 0)
				|| (horizontaleplaats >= (getWidth() - 100))) {
			res = -res;
		}
		repaint();
	}
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		final int baldia = 100;
		g.setColor(Color.ORANGE);
		g.fillOval(horizontaleplaats, verticaleplaats, baldia, baldia);
		g.setColor(Color.BLACK);
		g.drawOval(horizontaleplaats, verticaleplaats, baldia, baldia);
		g.drawOval(horizontaleplaats + baldia / 4, verticaleplaats, baldia / 2,
				baldia);
	}
je ziet is timer roept de actionlistener aan op ingestelde tijdstippen deze repaint en dan gaat hij naar paintcomponent

nu ga je best een systemout geven bij je actionPer... geven en een hoog getal zoals 3000 bvb bij je ww zodat alles traag gaat merk op dat je nu zal zien als hij de action... laat uitvoeren

maar nu moet je zien dat je ook je instantie autoklik van het object timer verliest na constructor dus verdwijnt
INDIEN JE TIMER GEBRUIKT MOET JE EEN FINALIZE VOORZIEN OM JE TIMER TE STOPPEN EN NULL TE MAKEN. MERK OP DAT JE ANDERS SLECHTE CODE MAAKT
 
Sorry dat ik niet eerder reageerde maar ik was in het buitenland.
Bedankt voor de hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan