Не работает обновление формы - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Суть проблемы такова: Я создаю форму, на ней JTextField. Я его обновляю в цикле с паузой, Thread.sleep (500). Мне нужно, чтобы информация обновлялась в этом текстовом поле, а на экран выводится только окончательная информация, т.е. setText срабатывает, sleep тоже, но почему-то не работает. Я уже пробовал и repaint, и validate, и revalidate. Такое ощущение, что форма выводится в окончательном виде только после завершения моего метода showNextExample. Причем выполнение метода main дебаггером не отлавливается, может ли быть такое, что форма выводится, а main не запускается? Помогите пожалуйста, очень нужно!
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package excitingarithmetic;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Console;
import java.util.ArrayList;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Timer;
/**
 *
 * @author husky
 */
public class InteractiveForm extends javax.swing.JFrame {
 
    /**
     * Creates new form InteractiveForm
     */

    private InteractiveClass interactiveExmpl;
    private int currentExampleNumber;

    // Номер примера, который на данный момент исполняется
    private int executedExample =0;
    
    public InteractiveForm() {
        
        // Подготовить выражения (случайным образом)
        interactiveExmpl = new InteractiveClass();
        
        initComponents();
 
    }
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        NumberField = new javax.swing.JTextField();
        answerField = new javax.swing.JFormattedTextField();
        answerBtn = new javax.swing.JButton();
        answerLabel = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        NumberField.setEditable(false);
        NumberField.setFont(new java.awt.Font("Comic Sans MS", 1, 48)); // NOI18N
        NumberField.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        NumberField.setText("empty");
 
        answerField.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        answerField.setText("0");
 
        answerBtn.setText("Готово");
        answerBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                answerBtnActionPerformed(evt);
            }
        });
 
        answerLabel.setText("Введите ответ");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(128, Short.MAX_VALUE)
                .addComponent(NumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(126, 126, 126))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(answerField, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(answerBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(answerLabel))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(105, 105, 105)
                .addComponent(NumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE)
                .addComponent(answerLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(answerField, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(answerBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
 
        pack();
    }// </editor-fold>                        
 
    private void answerBtnActionPerformed(java.awt.event.ActionEvent evt) {                                          
        
        // Записывает полученный результат в массив с ответами
        Integer readResult = Integer.parseInt(answerField.getText());
        interactiveExmpl.putInteractiveResults(readResult);
        
        // Если считанное значение совпадает с заложенным ответом, то счетчик правильных ответов плюсуется
        if (readResult==interactiveExmpl.getInteractiveResults().get(currentExampleNumber))
        {
            interactiveExmpl.RightResults++;
        }
        // Показывает следующую очередь из чисел
        this.executedExample++;
        
        showNextExample(executedExample);
    }                                         
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                System.out.println("Работает метод main->run");
                new InteractiveForm().setVisible(true);
                System.out.println("Окончил работу метод main->run");
            }
        });

    }
    
    // Показывает следующую очередь из чисел
    private void showNextExample(int executedExample)
    {
        System.out.println("Работает метод showNextExample");
        this.repaint();
        this.setVisible(true);
        ArrayList<Integer> numbersInExample = interactiveExmpl.queueExamples.get(executedExample).getNumbersInExample();
 
                for (Integer number: numbersInExample)
                    {
                        NumberField.setText(number.toString());
                        NumberField.revalidate();
                        
                    try {
                        
                        NumberField.setVisible(false);
                        Thread.sleep(500);
                        NumberField.setVisible(true);
                        this.repaint();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(InteractiveForm.class.getName()).log(Level.SEVERE, null, ex);
                    }
                        repaint();
                    }
 
        };
    
    // Variables declaration - do not modify                     
    private javax.swing.JTextField NumberField;
    private javax.swing.JButton answerBtn;
    private javax.swing.JFormattedTextField answerField;
    private javax.swing.JLabel answerLabel;
    // End of variables declaration                   
}

Решение задачи: «Не работает обновление формы»

textual
Листинг программы
Thread.sleep(500);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5