我想要在t1(TextField)中输入用户想要输入的数量的编程程序并通过b1(按钮)确认。在t2(TextField)中,用户给出第一个值并通过b2(按钮)输入,下次用户给出第二个值并再次通过b2(按钮)输入。它发生了很多次,因为n是高(来自第一个听众)。
如何更改程序执行的代码?
现在,当我给t2第一个值并按下按钮时,b2仍然按下,用户无法做任何事情。
final AtomicInteger n = new AtomicInteger();
ActionListener lis5 = new ActionListener(){
public void actionPerformed(ActionEvent e) {
String a = t1.getText();
n.set(Integer.parseInt(a));
}
};
b1.addActionListener(lis5);
ActionListener lis6 = new ActionListener(){
public void actionPerformed(ActionEvent e) {
//String b = t2.getText(); ??
//n.set(Integer.parseInt(b)); ??
int nn = n.get();
int [] tab = new int[nn];
for(int i=0;i<nn;i++){
tab[i] = in.nextInt();
}
}
};
b2.addActionListener(lis6);
答案 0 :(得分:1)
首先,摆脱ActionListener中的for循环。 For循环适用于线性控制台程序,您可以使用扫描仪输入数据,但不能使用事件驱动的GUI输入数据。在这里,而不是for循环使用一个counter int变量,它在ActionListener中递增,并用于帮助您确定数据的放置位置。还要获取ActionListener的int数组 out 并进入类,以便它可以用于类的其余部分。在伪代码中:
in the class
int array declared here BUT not initialized here.
first Actionlistener
get total count value
initialize array using this value
end first action listener
second ActionListener
int counter variable set to 0.
action performed method
if counter < total count
get value from text field
convert it to an int
place value into intArray[counter]
increment counter
end if
end action performed
end second ActionLisener