Обновление позиции компонентов во время выполнения кода? - PullRequest
0 голосов
/ 09 июля 2019

Я использую Eclipse WindowBuilder для создания графического интерфейса для моей Java-программы. В настоящее время я застрял, так как создал кнопку, и я дал переменным X и Y разные переменные. Эти переменные изменяются в цикле «Пока» при нажатии кнопки и отправке события.

Я пробовал смотреть на многопоточность. Однако я не думаю, что это самый жизнеспособный вариант. Также, если бы я делал многопоточность, я не знаю, какой бит кода мне пришлось бы поместить в отдельный поток.

New button = Button button(X, Y, 100,100);

Я пытаюсь увеличить координаты X и Y

1 Ответ

0 голосов
/ 09 июля 2019

Awt и Swing не являются потокобезопасными, поэтому, если вы пытаетесь обновить пользовательский интерфейс в том же потоке, у вас будет поведение «зависание приложения», и кнопка не изменит свою позицию, если вы нажмете на нее несколько раз.Вы можете отключить кнопку во время выполнения цикла, и перед началом цикла убедитесь, что кнопка не отключена.Например:

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);
} 

enter image description here

Читайте также: Выпуск потоков Java awt Многопоточность в Swing

...