I'm working on this Java tutorial and it has me program a window that draws horizontal lines and allows the user to change the distance between the lines. The problem is, everything works splendidly, until I add the variable for the distance to the while loop, then the window goes blank and is unresponsive - but it reports no errors. I have rewritten the whole thing four times now, and have written it in different ways (do-while/while/for) yet the problem seems continuously to be the variable. I have no idea what I'm doing wrong.
Here's the class:
package h03horizontalelijnen2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Paneel extends JPanel implements ActionListener {
//declaratie objecten & variabelen
private int afstand; // variabele voor afstand tussen lijnen
private int yWaarde; //variabele voor yWaarde lijnen
private JTextField inputAfstand; // tekstveld voor input afstand
private JButton tekenKnop; // tekenknop
public Paneel(){ //bevat tekstveld, knop & label
//creatie objecten
inputAfstand = new JTextField("2", 2); //creatie tekstvak: 2 getallen
inputAfstand.addActionListener(this); //luistert naar actie
inputAfstand.setToolTipText("Vul in dit vak de afstand tussen de lijnen in"); //tooltip
tekenKnop = new JButton("Teken lijnen"); //creatie knop
tekenKnop.addActionListener(this); //luistert naar actie
inputAfstand.setToolTipText("Klik om de lijnen opnieuw te tekenen"); //tooltip
//elementen aan paneel toevoegen
add(new JLabel ("Afstand tussen de lijnen: "));
add(inputAfstand);
add(tekenKnop);
}
public void paintComponent(Graphics g){ //teken lijnen
super.paintComponent(g);
g.setColor(Color.RED); //maak kleur rood
int onder = getHeight(); //bepaal hoogte scherm
int midden = getHeight() /2; // midden
int eindeScherm = getWidth();
yWaarde = midden; // variabele voor yWaarde, startpunt = midden
while (yWaarde <= onder) {
g.drawLine(0, yWaarde, eindeScherm, yWaarde);
yWaarde = yWaarde + afstand;
}
}
public void bepaalAfstand(){ //haal getal uit inputAfstand tekstvak
afstand = Integer.parseInt(inputAfstand.getText());
}
public void actionPerformed(ActionEvent e) { //klikken triggert:
bepaalAfstand(); //bepaal input afstand
repaint(); //opnieuw tekenen
}
}
paintComponent()is called beforebepaalAfstand()is called,afstandwill be zero, and yourwhileloop will never end.paintComponentto behave beforebepaalAfstandhas been called. It could be as simple as initialisingafstandto 1.