在代码为 运行 时更新组件位置?

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