Swing, актуализирайте стойността на текстовото поле в рамките на for

Опитвам се да актуализирам моя Java Swing формуляр в for. Опитах много начини, но не се получи. Това е, което опитах последно:

for(int i=0; i<10; i++) {
    jTextField1.setText("" + i);

    try {
        Thread.sleep(500);
    }
    catch (InterruptedException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }
}

person Marin Bînzari    schedule 06.05.2013    source източник
comment

Завъртях изгледа на масата си на 90°. Сега искам да получа индексния път на средната клетка. Когато табличният изглед не се превърта, той показва 3 клетки. Това, което искам е, когато табличният изглед спре да се превърта, средната клетка трябва да бъде със зелен цвят. Понякога получавам грешен индексен път, когато се виждат повече от 3 клетки при бързо превъртане. Прикачих изображение за справкаТова е моят хоризонтален изглед на таблица и искам да покажа зелен цвят за средната клетка

  -  person Andrew Thompson    schedule 06.05.2013
comment
възможен дубликат на как за актуализиране на jLabel всеки път с цикъл while със закъснение (и десетки други подобни въпроси)   -  person JB Nizet    schedule 06.05.2013
comment
Благодаря за отговорите. Ще видя какво мога да направя с Timer. Проблемът е, че правя математически изчисления в цикъл, така че не знам как да приложа това с Timer.   -  person Marin Bînzari    schedule 06.05.2013
comment
@SpartakusMd Тогава SwingWorker е твой приятел. Вижте този отговор   -  person Guillaume Polet    schedule 06.05.2013


Отговори (2)


Не можете да направите вашата променлива jTextField1 „final“, но можете да използвате локална променлива, декларирана като final и зададена на вашата променлива jTextField1, както показах по-долу... Използвах много пъти такъв подход в моето кодиране, работи...

final jTextField local_var = jTextField1;

SwingUtilities.invokeLater(new Runnable() {

public void run() {

for (int i=0; i<10; i++) { local_var.setText("" + i); }});

person Ali VELI    schedule 06.05.2013

Предполагам, че се опитвате да актуализирате компонент от външна нишка. По принцип Swing не е безопасен за нишки, за повече подробности погледнете това. По отношение на вашия код, опитайте да следвате този подход:

for(int i=0; i<10; i++) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jTextField1.setText("" + i);
        }
    });
}

Променлива jTextField1 трябва да бъде декларирана като final.

person Eugene    schedule 06.05.2013
comment
Просто опитах това. Ако декларирам jTextField1 като final, тогава инициализирането на полето е неуспешно. Не може да се присвои стойност на крайните променливи. - person Marin Bînzari; 06.05.2013
comment
Можете да създадете клас, който имплементира ‹code›Runnable‹/code› и приема ‹code›jTextField1‹/code› като параметър. - person Eugene; 06.05.2013