在代码为 运行 时更新组件位置?
Updating a components position while code is running?
我正在使用 Eclipse WindowBuilder 为我的 Java 程序构建 GUI。我目前被卡住了,因为我创建了一个按钮并且我给了 X 和 Y 位置不同的变量。单击按钮并发出事件时,这些变量会在 'While' 循环中发生变化。
我试过研究多线程。但是我认为这不是最可行的选择。另外,如果我使用多线程,我不知道我必须将哪一部分代码放在单独的线程中。
New button = Button button(X, Y, 100,100);
我正在尝试增加 x 和 Y 坐标
Awt 和 Swing 不是线程安全的,因此,如果您尝试在同一个线程中更新 UI,您将具有 "application freeze" 行为,并且按钮不会更改其位置,如果您点击它几次。您可以在循环执行期间禁用该按钮,并在开始循环之前检查该按钮是否未禁用。例如:
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);
}
另请阅读:
Java awt threads issue
Multithreading in Swing
我正在使用 Eclipse WindowBuilder 为我的 Java 程序构建 GUI。我目前被卡住了,因为我创建了一个按钮并且我给了 X 和 Y 位置不同的变量。单击按钮并发出事件时,这些变量会在 'While' 循环中发生变化。
我试过研究多线程。但是我认为这不是最可行的选择。另外,如果我使用多线程,我不知道我必须将哪一部分代码放在单独的线程中。
New button = Button button(X, Y, 100,100);
我正在尝试增加 x 和 Y 坐标
Awt 和 Swing 不是线程安全的,因此,如果您尝试在同一个线程中更新 UI,您将具有 "application freeze" 行为,并且按钮不会更改其位置,如果您点击它几次。您可以在循环执行期间禁用该按钮,并在开始循环之前检查该按钮是否未禁用。例如:
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);
}
另请阅读: Java awt threads issue Multithreading in Swing