Java,while循环在添加变量时崩溃 - >白色,无响应的JFrame

时间:2016-01-25 09:45:49

标签: java swing while-loop

我正在研究这个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

    }

}

2 个答案:

答案 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来修复它。