Медленное заполнение Java JFrame Application с помощью NetBeans 11.0 - PullRequest
0 голосов
/ 30 мая 2019

Я изучаю Java, поэтому я начал с создания формы JFrame для цифровых часов. Все работает, но при загрузке приложения требуется около 2/3 секунды, чтобы отобразить мою рамку и мою метку на фоновой панели.

Файл: DigitalClock.java

package digitalclock;

import JForms.DigitalClockJForm;

public class DigitalClock {

    public static void main(String[] args) {
        new DigitalClockJForm().setVisible(true);

    }

}

Файл: DigitalClockJForm.java

package JForms;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DigitalClockJForm extends javax.swing.JFrame 
{   
    // Member Variables
    private int second, minute, hour, day, month, year;
    String timeDate;

    // Constructors
    public DigitalClockJForm() {
        initComponents();
        clock();
    }

    public void clock()
    {
        Thread t = new Thread(){

            @Override
            public void run(){

                try {
                    while (true){
                        Calendar cal = new GregorianCalendar();

                        day = cal.get(Calendar.DAY_OF_MONTH);
                        month = cal.get(Calendar.MONTH);
                        year = cal.get(Calendar.YEAR);

                        second = cal.get(Calendar.SECOND);
                        minute = cal.get(Calendar.MINUTE);
                        hour = cal.get(Calendar.HOUR);

                        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a dd/MM/yyyy");

                        Date date = cal.getTime();

                        timeDate = sdf.format(date);

                        mainLabel.setText(timeDate);
                    }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        t.start();
    }

 << Net Beans generated code >>

// Variables declaration - do not modify                     
private javax.swing.JLabel mainLabel;
private javax.swing.JPanel mainPanel;
// End of variables declaration   

Для отображения метки и панели в форме требуется 2/3 секунды.

Форма запускается так: Figure 01: When the application is launched

Затем через 2/3 секунды все, включая границу, отображается правильно: Figure 01: Form looks correct after 2/3 seconds

Я ожидал, что ярлык и панель отобразятся сразу после запуска приложения.

1 Ответ

0 голосов
/ 30 мая 2019

Нет необходимости создавать подклассы JFrame или даже JPanel в вашем случае, так как вы не отменяете ни один из их методов. Просто создайте JPanel и добавьте в него свои компоненты, затем добавьте этот JPanel в новый JFrame, упакуйте кадр и отобразите его.

Создайте Swing.Timer с задержкой в ​​1000 миллисекунд, а в методе actionPerformed обновите отображаемое время.

Вероятно, создавать новый GregorianCalendar излишне всякий раз, когда вызывается метод actionPerformed. Обновления дисплея на одну секунду каждый раз должно быть достаточно, возможно, с новым Календарем каждые несколько минут для повторной синхронизации, если только ваш ЦП не слишком занят выполнением других приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...