我正在使用Eclipse WindowBuilder为我的Java程序构建GUI。由于创建了按钮,我目前处于困境,并且为X和Y位置指定了不同的变量。单击按钮并发送事件后,这些变量将在“ While”循环中更改。
我尝试着看多线程。但是我认为这不是最可行的选择。另外,如果我做了多线程,我也不知道我必须把代码的哪一部分放在单独的线程中。
New button = Button button(X, Y, 100,100);
我正在尝试增加x和Y坐标
答案 0 :(得分:0)
Awt和Swing都不是线程安全的,因此,如果您尝试在同一线程中更新UI,则将出现“应用程序冻结”行为,如果多次单击该按钮,按钮的位置将不会更改。您可以在执行循环的同时禁用按钮,并在开始循环之前检查按钮是否未禁用。例如:
walkerButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
walkerButtonActionPerformed(evt);
}
});
private void walkerButtonActionPerformed(java.awt.event.ActionEvent evt) {
// if walker button is disabled exit the method
if (!walkerButton.isEnabled()) {
return;
}
// Disable the button before starting the loop
walkerButton.setEnabled(false);
int steps = 20;
int stepDistance = 2;
while (steps > 0) {
// Set the walker button new location
int x = walkerButton.getX() + stepDistance;
int y = walkerButton.getY() + stepDistance;
walkerButton.setLocation(x, y);
steps--;
}
// Enable the button after the loop execution
walkerButton.setEnabled(true);
}