Не работает обновление формы - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д