Ошибка с настройкой заставки Java Swing - PullRequest
0 голосов
/ 03 декабря 2018

Прежде всего, я не очень опытен в Java Swing, поэтому пренебрегаю своими ошибками.Теперь перейдем к проблеме.Я пытаюсь реализовать заставку в настольном приложении.поэтому я успешно создал небольшой дизайн заставки.

Вот код:

Экран заставки:

package com.openbravo.pos.forms;
public class demoform1 extends javax.swing.JFrame {

public demoform1() {
    initComponents();
    System.out.println("demoform1........");
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 32767));
    defaultpanel = new javax.swing.JPanel();
    title = new java.awt.Label();
    loading = new java.awt.Label();
    loadingnum = new javax.swing.JProgressBar();

    setUndecorated(true);

    defaultpanel.setBackground(new java.awt.Color(1, 231, 238));
    defaultpanel.setForeground(new java.awt.Color(1, 1, 1));
    defaultpanel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

    title.setAlignment(java.awt.Label.CENTER);
    title.setFont(new java.awt.Font("URW Chancery L", 3, 36)); // NOI18N
    title.setForeground(new java.awt.Color(254, 254, 254));
    title.setName("agile"); // NOI18N
    title.setText("Agile infoways pvt. ltd.");

    loading.setAlignment(java.awt.Label.CENTER);
    loading.setFont(new java.awt.Font("URW Chancery L", 3, 24)); // NOI18N
    loading.setForeground(new java.awt.Color(254, 254, 254));
    loading.setName(""); // NOI18N
    loading.setText("99%");

    loadingnum.setBackground(new java.awt.Color(247, 253, 22));
    loadingnum.setForeground(new java.awt.Color(1, 1, 1));

    javax.swing.GroupLayout defaultpanelLayout = new javax.swing.GroupLayout(defaultpanel);
    defaultpanel.setLayout(defaultpanelLayout);
    defaultpanelLayout.setHorizontalGroup(
        defaultpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(defaultpanelLayout.createSequentialGroup()
            .addGap(107, 107, 107)
            .addComponent(title, javax.swing.GroupLayout.PREFERRED_SIZE, 490, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(114, Short.MAX_VALUE))
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, defaultpanelLayout.createSequentialGroup()
            .addGap(0, 0, Short.MAX_VALUE)
            .addComponent(loading, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(294, 294, 294))
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, defaultpanelLayout.createSequentialGroup()
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(loadingnum, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
            .addGap(277, 277, 277))
    );
    defaultpanelLayout.setVerticalGroup(
        defaultpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(defaultpanelLayout.createSequentialGroup()
            .addGap(62, 62, 62)
            .addComponent(title, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(67, 67, 67)
            .addComponent(loading, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(loadingnum, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE)
            .addGap(64, 64, 64))
    );

    title.getAccessibleContext().setAccessibleName("loading");
    loading.getAccessibleContext().setAccessibleName("loading");
    loadingnum.getAccessibleContext().setAccessibleName("loadingnumber");
    loadingnum.getAccessibleContext().setAccessibleDescription("");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(defaultpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(defaultpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    setBounds(0, 0, 711, 379);
}// </editor-fold>                        
// Variables declaration - do not modify                     
public javax.swing.JPanel defaultpanel;
private javax.swing.Box.Filler filler1;
public java.awt.Label loading;
public javax.swing.JProgressBar loadingnum;
public java.awt.Label title;
// End of variables declaration                   
}

Код, где я вызываю заставку в основном корневом приложении:

        demoform1 demo1 = new demoform1();
        try {
            demo1.setVisible(true);
            for (int i = 0; i <= 100; i++) {
                Thread.sleep(40);
                demo1.loading.setText(Integer.toString(i) + "%");
                demo1.loadingnum.setValue(i);
                if (i == 100) {
                    demo1.setVisible(false);
                    demo1 = null;
                }
            }
        } catch (Exception e) {
      }

, поэтому проблема в том, что заставка работает нормально, но принятый вывод не приходит.

ожидаемый экран-заставка:

enter image description here

текущий экран-заставка:

enter image description here

Если кто-то может помочь, то это будет удовольствие.

1 Ответ

0 голосов
/ 03 декабря 2018

Я вижу, что вы используете много классов Swing, когда вы можете сделать этот экран-заставку, просто используя JavaFX и Scene Builder, чтобы сделать экран.

Вы можете использовать предварительный загрузчик, проверьте этот: https://docs.oracle.com/javafx/2/deployment/preloaders.htm

Идея в основном состоит в том, чтобы сделать заставку, а затем:

public class Main {
   public static void main(String[] args) {
      LauncherImpl.launchApplication(Main.class, SplashScreen.class, args);
   }
}

Используя свой код, вы можете сделать что-то вроде этого:

JWindow window = new JWindow();

        demoform1 df = new demoform1();

        window.getContentPane().add(df.getContentPane());

        window.setBounds(600,600,600,600);
        window.setLocationRelativeTo(null);

        window.setVisible(true);
        try {
             for (int i = 0; i <= 100; i++) {
                    Thread.sleep(40);
                    df.loading.setText(Integer.toString(i) + "%");
                    df.loadingnum.setValue(i);
                    if (i == 100) {
                        window.setVisible(false);
                        JFrame frame = new JFrame();
                        frame.add(new JLabel("It Worked!!!!!"));
                        frame.setVisible(true);
                        frame.setSize(300,100);
                        window.dispose();
                    }
                }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

Это будетсделайте этот эффект загрузки, а затем покажите простой JFrame с простым сообщением.

Я не специалист по Swing, но я надеюсь, что это поможет вам.

...