Java,而添加变量时循环崩溃-->;白色、无响应的JFrame
我正在编写这个Java教程,它让我编写了一个窗口来绘制水平线,并允许用户更改线之间的距离。问题是,一切都运行得很好,直到我将距离变量添加到while循环,然后窗口变为空白并且没有响应-但它不会报告任何错误。我已经把整件事重写了四次,并且用不同的方式写了出来(do while/while/for),但问题似乎一直是个变量。我不知道我做错了什么 下面是课程:Java,而添加变量时循环崩溃-->;白色、无响应的JFrame,java,swing,while-loop,Java,Swing,While Loop,我正在编写这个Java教程,它让我编写了一个窗口来绘制水平线,并允许用户更改线之间的距离。问题是,一切都运行得很好,直到我将距离变量添加到while循环,然后窗口变为空白并且没有响应-但它不会报告任何错误。我已经把整件事重写了四次,并且用不同的方式写了出来(do while/while/for),但问题似乎一直是个变量。我不知道我做错了什么 下面是课程: package h03horizontalelijnen2; import java.awt.*; import java.awt.even
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
}
}
包装h03horizontalelijnen2;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类Paneel扩展JPanel实现ActionListener{
//declaratie objecten&variabelen
私人国际展台;//variabele voor afstand tussen lijnen
瓦瓦德私人酒店;//variabele voor YWARDE lijnen
私有JTextField inputAfstand;//tekstveld voor input afstand
私有JButton tekenKnop;//tekenKnop
公共面板(){//bevat技术等级、旋钮和标签
//创造性异议
inputAfstand=newjtextfield(“2”,2);//creatie-tekstvak:2 getallen
inputAfstand.addActionListener(this);//luistert naar actie
inputAfstand.setToolTipText(“Vul in dit vak de afstand tussen de lignen in”);//工具提示
tekenKnop=new JButton(“Teken lijnen”);//creatie knop
tekenKnop.addActionListener(此);//luistert naar actie
inputAfstand.setToolTipText(“Klik om de lijnen opnieuw te tekenen”);//工具提示
//阿安·帕内尔·托沃根元素酒店
增加(新的JLabel(“Afstand tussen de lijnen:”);
添加(InputStand);
添加(tekenKnop);
}
公共组件(图形g){//teken Lignen
超级组件(g);
g、 setColor(Color.RED);//maak kleur rood
int onder=getHeight();//bepaal hoogte scherm
int midden=getHeight()/2;//midden
int eindeScherm=getWidth();
YWARDE=midden;//变量voor YWARDE,startpunt=midden
while(yWaarde正如khelwood已经指出的,问题是变量afstand
永远不会被bepaalAfstand()
初始化。它是0,因此您永远不会退出while循环,因为yWaarde=yWaarde+afstand;
不会更改值
我不确定您在这里想做什么,因为您的变量和方法名称不是英文的
也许这很简单,只需在你的while外观上添加一个gard条件
while(yWaarde 0)
问候,,
雷纳如果:
afstand = Integer.parseInt(inputAfstand.getText());
结果为0时,您将陷入while循环。
因此,如果您的InputStand从0开始,您就会遇到麻烦
您可以通过测试0或将inputAfstand初始化为1来修复它。如果在调用bepaalAfstand()
之前调用paintComponent()
,afstand
将为零,而while
循环将永远不会结束。@khelwood我交换了bepaalAfstand()和paintComponent()大约,但问题仍然存在。交换两种方法来尝试修复此错误毫无意义。您需要考虑在调用bepaalAfstand
之前paintComponent
的预期行为。可以简单地将afstand
初始化为1。谢谢!我还以为是通过设置“2”来初始化它的在文本字段中,它应该从中获取其值,但不知怎么的,它不起作用。这修复了它。请将我的答案标记为解决问题的答案(如果是)-谢谢