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

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

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

Здравствуйте! Суть проблемы такова: Я создаю форму, на ней JTextField. Я его обновляю в цикле с паузой, Thread.sleep (500). Мне нужно, чтобы информация обновлялась в этом текстовом поле, а на экран выводится только окончательная информация, т.е. setText срабатывает, sleep тоже, но почему-то не работает. Я уже пробовал и repaint, и validate, и revalidate. Такое ощущение, что форма выводится в окончательном виде только после завершения моего метода showNextExample. Причем выполнение метода main дебаггером не отлавливается, может ли быть такое, что форма выводится, а main не запускается? Помогите пожалуйста, очень нужно!
Листинг программы
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package excitingarithmetic;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.io.Console;
  10. import java.util.ArrayList;
  11. import java.util.TimerTask;
  12. import java.util.logging.Level;
  13. import java.util.logging.Logger;
  14. import javax.swing.Timer;
  15. /**
  16. *
  17. * @author husky
  18. */
  19. public class InteractiveForm extends javax.swing.JFrame {
  20. /**
  21. * Creates new form InteractiveForm
  22. */
  23.  
  24. private InteractiveClass interactiveExmpl;
  25. private int currentExampleNumber;
  26.  
  27. // Номер примера, который на данный момент исполняется
  28. private int executedExample =0;
  29. public InteractiveForm() {
  30. // Подготовить выражения (случайным образом)
  31. interactiveExmpl = new InteractiveClass();
  32. initComponents();
  33. }
  34. /**
  35. * This method is called from within the constructor to initialize the form.
  36. * WARNING: Do NOT modify this code. The content of this method is always
  37. * regenerated by the Form Editor.
  38. */
  39. @SuppressWarnings("unchecked")
  40. // <editor-fold defaultstate="collapsed" desc="Generated Code">
  41. private void initComponents() {
  42. NumberField = new javax.swing.JTextField();
  43. answerField = new javax.swing.JFormattedTextField();
  44. answerBtn = new javax.swing.JButton();
  45. answerLabel = new javax.swing.JLabel();
  46. setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  47. NumberField.setEditable(false);
  48. NumberField.setFont(new java.awt.Font("Comic Sans MS", 1, 48)); // NOI18N
  49. NumberField.setHorizontalAlignment(javax.swing.JTextField.CENTER);
  50. NumberField.setText("empty");
  51. answerField.setHorizontalAlignment(javax.swing.JTextField.CENTER);
  52. answerField.setText("0");
  53. answerBtn.setText("Готово");
  54. answerBtn.addActionListener(new java.awt.event.ActionListener() {
  55. public void actionPerformed(java.awt.event.ActionEvent evt) {
  56. answerBtnActionPerformed(evt);
  57. }
  58. });
  59. answerLabel.setText("Введите ответ");
  60. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  61. getContentPane().setLayout(layout);
  62. layout.setHorizontalGroup(
  63. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  64. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  65. .addContainerGap(128, Short.MAX_VALUE)
  66. .addComponent(NumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  67. .addGap(126, 126, 126))
  68. .addGroup(layout.createSequentialGroup()
  69. .addContainerGap()
  70. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  71. .addGroup(layout.createSequentialGroup()
  72. .addComponent(answerField, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)
  73. .addGap(18, 18, 18)
  74. .addComponent(answerBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE))
  75. .addComponent(answerLabel))
  76. .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  77. );
  78. layout.setVerticalGroup(
  79. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  80. .addGroup(layout.createSequentialGroup()
  81. .addGap(105, 105, 105)
  82. .addComponent(NumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
  83. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE)
  84. .addComponent(answerLabel)
  85. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  86. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  87. .addComponent(answerField, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
  88. .addComponent(answerBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  89. .addContainerGap())
  90. );
  91. pack();
  92. }// </editor-fold>
  93. private void answerBtnActionPerformed(java.awt.event.ActionEvent evt) {
  94. // Записывает полученный результат в массив с ответами
  95. Integer readResult = Integer.parseInt(answerField.getText());
  96. interactiveExmpl.putInteractiveResults(readResult);
  97. // Если считанное значение совпадает с заложенным ответом, то счетчик правильных ответов плюсуется
  98. if (readResult==interactiveExmpl.getInteractiveResults().get(currentExampleNumber))
  99. {
  100. interactiveExmpl.RightResults++;
  101. }
  102. // Показывает следующую очередь из чисел
  103. this.executedExample++;
  104. showNextExample(executedExample);
  105. }
  106. /**
  107. * @param args the command line arguments
  108. */
  109. public static void main(String args[]) {
  110. /* Set the Nimbus look and feel */
  111. //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
  112. /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
  113. * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url]
  114. */
  115. try {
  116. for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
  117. if ("Nimbus".equals(info.getName())) {
  118. javax.swing.UIManager.setLookAndFeel(info.getClassName());
  119. break;
  120. }
  121. }
  122. } catch (ClassNotFoundException ex) {
  123. java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  124. } catch (InstantiationException ex) {
  125. java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  126. } catch (IllegalAccessException ex) {
  127. java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  128. } catch (javax.swing.UnsupportedLookAndFeelException ex) {
  129. java.util.logging.Logger.getLogger(InteractiveForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  130. }
  131. //</editor-fold>
  132. /* Create and display the form */
  133. java.awt.EventQueue.invokeLater(new Runnable() {
  134. public void run() {
  135. System.out.println("Работает метод main->run");
  136. new InteractiveForm().setVisible(true);
  137. System.out.println("Окончил работу метод main->run");
  138. }
  139. });
  140.  
  141. }
  142. // Показывает следующую очередь из чисел
  143. private void showNextExample(int executedExample)
  144. {
  145. System.out.println("Работает метод showNextExample");
  146. this.repaint();
  147. this.setVisible(true);
  148. ArrayList<Integer> numbersInExample = interactiveExmpl.queueExamples.get(executedExample).getNumbersInExample();
  149. for (Integer number: numbersInExample)
  150. {
  151. NumberField.setText(number.toString());
  152. NumberField.revalidate();
  153. try {
  154. NumberField.setVisible(false);
  155. Thread.sleep(500);
  156. NumberField.setVisible(true);
  157. this.repaint();
  158. } catch (InterruptedException ex) {
  159. Logger.getLogger(InteractiveForm.class.getName()).log(Level.SEVERE, null, ex);
  160. }
  161. repaint();
  162. }
  163. };
  164. // Variables declaration - do not modify
  165. private javax.swing.JTextField NumberField;
  166. private javax.swing.JButton answerBtn;
  167. private javax.swing.JFormattedTextField answerField;
  168. private javax.swing.JLabel answerLabel;
  169. // End of variables declaration
  170. }

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут