java - Java Swing 启动画面配置错误
问题描述
首先,我在 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) {
}
所以问题是我的启动画面执行得很好,但接受的输出没有出现。
预期的闪屏:
当前启动画面:
如果有人可以提供帮助,那将是一种乐趣。
解决方案
我看到你使用了很多 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 方面的专家,但我希望这对你有所帮助。
推荐阅读
- php - 在 WooCommerce 中更改库存电子邮件通知收件人
- mysql - 维护 MySQL 和文件系统之间的数据完整性
- c# - 如何将 XML 输出格式化程序添加到 ASP.Net 样板?
- apache-flink - 未执行操作员时检查点中止
- redis - 如何为 Redis 集群设置密码?
- typescript - 在 Angular 6 中的 mat-expansion 面板标题内使用时,菜单未在 keydown.enter 上打开
- java - 如何在图数据库neo4j中表达时间段(时间)关系
- java - 将 Java 中的 ALT 键与 ActionMap 匹配
- ffmpeg - ffmpeg in:h264 out:yuv to stdout - 数据格式?
- qt - QMainWindow 的析构函数中的 saveState