我正在研究这个Java教程,它让我编写了一个绘制水平线条的窗口,允许用户改变线条之间的距离。问题是,一切都运行良好,直到我添加到while循环的距离的变量,然后窗口变为空白并且没有响应 - 但它报告没有错误。我现在已经四次改写了整个事情,并且用不同的方式写了(do-while / while / for)但问题似乎仍然是变量。我不知道我做错了什么。
这是班级:
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
}
}
答案 0 :(得分:4)
正如khelwood已经指出的那样,您的变量afstand
永远不会被bepaalAfstand()
初始化。它为0,因此您永远不会退出while循环,因为yWaarde = yWaarde + afstand;
不会更改值。
我不确定你在这里做什么,因为你的变量和方法名称不是英文的。
也许就像为你一边添加gard条件一样简单
while (yWaarde <= onder && afstand > 0)
此致 赖
答案 1 :(得分:2)
如果:
afstand = Integer.parseInt(inputAfstand.getText());
结果为0,你将陷入你的while循环。 因此,如果您的inputAfstand从0开始,则会遇到麻烦。
您可以通过测试0或将inputAfstand初始化为1来修复它。