【问题标题】:How does NetBeans' Splash Screen feature work?NetBeans 的启动画面功能如何工作?
【发布时间】:2011-02-12 11:59:12
【问题描述】:

NetBeans 新手,刚刚注意到在 File >> Project Properties >> Application 对话框中有一个标记为 Splash Screen 的文本字段,允许您指定路径到您希望在程序启动时显示的图像。

我想自定义启动画面的工作方式(添加进度条等),并且想从头开始编写代码,但不知道从哪里开始。基于 Java/Swing 的启动画面的最佳实践是什么?

感谢您的所有意见!

【问题讨论】:

    标签: java netbeans splash-screen


    【解决方案1】:

    项目属性 -> 应用程序 -> 启动画面允许您将图像添加到应用程序。此属性在 MANIFEST.MF 中设置一个名为 SplashScreen-Image: 的值,例如SplashScreen-Image: META-INF/GlassFish316x159.jpg 此属性将自动使图像显示为闪屏。它不能在 NetBeans 内部运行,必须在 IDE 外部运行。

    有一个教程Splash Screen Beginner Tutorial 详细说明了如何使用它。本教程是针对 NetBeans 6.8 完成的,但将适用于 7.2.1,这是本文发布时的最新版本。

    【讨论】:

      【解决方案2】:

      我不确定 NetBeans 是如何做到的,但 JRE 从版本 6 开始支持启动画面。请参阅 http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/

      【讨论】:

        【解决方案3】:

        启动画面只是 java.awt.Window 或未修饰的 javax.swing.JFrame 的一个实例。 要创建窗口,只需说new Window(null),然后设置大小和位置(使用 takeit 可以计算屏幕中心的位置),然后说window.setVisible(true)

        由于这是您自己的窗口,您可以做任何您想做的事情:设置布局、图像、将进程栏添加到 SOUTH 等。

        也可以使用JFrame:new JFrame().setUndecorated(true)`

        【讨论】:

          【解决方案4】:

          有几种方法可以做到这一点。

          要制作一个简单的启动画面(图像),您可以在 java 应用程序的命令行中指定它。

          Here is a simple example

          java -splash:<file name> <class name>
          

          但是,如果您想要一个进度条,您将不得不做一些更复杂的事情,并自己编写一些代码。这是通过以下方式完成的。

          1. 使用您的初始屏幕元素创建一个 JWindow(或 Window 或未修饰的 JFrame)组件
          2. 将其设置为可见
          3. 完成其余的 Swing GUI 启动代码
          4. 将 JFrame 设置为可见,然后立即将 JWindow 设置为可见(false)

          这应该几乎立即显示启动画面,然后在您的应用程序完全加载后隐藏。

          要查看一些启动屏幕代码,请发送look here。链接中的实现仅展示了如何使用 -splash 命令实现您所能达到的效果,但它会为您提供一个良好的开端,包括您请求的进度条。

          【讨论】:

            【解决方案5】:

            我希望这对你有所帮助,这是一个小例子,说明如何使用虚拟进度条为自己创建一个简单的启动画面:

            import java.awt.*;
            import java.awt.event.*;
            import javax.swing.*;
            
            class SplashScreen extends JWindow
            {
            
            private static JProgressBar progressBar = new JProgressBar();
            private static SplashScreen execute;
            private static int count;   
            private static Timer timer1;
            
            public SplashScreen()
            {                   
                Container container = getContentPane();
                container.setLayout(null);      
            
                JPanel panel = new JPanel();
                panel.setBorder(new javax.swing.border.EtchedBorder());
                panel.setBackground(new Color(255,255,255));
                panel.setBounds(10,10,348,150);
                panel.setLayout(null);
                container.add(panel);       
            
                JLabel label = new JLabel("Hello World!");
                label.setFont(new Font("Verdana",Font.BOLD,14));
                label.setBounds(85,25,280,30);
                panel.add(label);
            
                progressBar.setMaximum(50);
                progressBar.setBounds(55, 180, 250, 15);        
                container.add(progressBar);         
                loadProgressBar();                  
                setSize(370,215);
                setLocationRelativeTo(null);
                setVisible(true);
            }
            public void loadProgressBar()
            {
                ActionListener al = new ActionListener()
                {
                    public void actionPerformed(java.awt.event.ActionEvent evt)
                    {
                        count++;
                        progressBar.setValue(count);
                        if (count == 50){
                            timer1.stop();
                            execute.setVisible(false);
            
                                        //load the rest of your application
            
                        }               
                    }};         
                timer1 = new Timer(50, al);
                timer1.start();
            }
            
            public static void main (String args[]){    
                 execute = new SplashScreen();      
               }
            }
            

            干杯!

            【讨论】:

            • 如何从不同的类运行启动画面?
            【解决方案6】:

            还可以考虑在 NetBeans 平台(基于 Swing 的 RCP)之上构建您的应用程序。众多好处之一:它带有可自定义的带有进度条的启动屏幕。

            示例进度条: http://platform.netbeans.org/tutorials/nbm-paintapp.html#wrappingUp

            将 Swing 应用程序移植到 NetBeans 平台: http://platform.netbeans.org/tutorials/60/nbm-porting-basic.html

            更多链接:

            http://netbeans.org/features/platform/index.html

            http://netbeans.org/features/platform/all-docs.html

            【讨论】:

            • 我有点认为问题是关于 NB Platform 应用程序...现在我想知道是否真的是这种情况。
            【解决方案7】:

            如果您的应用程序是使用 NetBeans 平台构建的,那么这里有一个关于启动屏幕自定义的教程:http://wiki.netbeans.org/Splash_Screen_Beginner_Tutorial

            【讨论】:

              【解决方案8】:

              有一个与 Splash screen 等效的示例 Javafx。然而,这个闪屏基本上是一个 java swing 小程序,它从 javafx 调用以显示给用户,并使用进度条和加载内容的标题或多或少地模拟 eclipse 和 netbeans 闪屏。 This 是链接。

              你一定能拿到代码,把java swings写的闪屏代码分离出来自己用。

              这是一个自定义的 java swing 启动画面。因此,它使用传统的

              来居中启动画面
              Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
              Dimension labelSize = l.getPreferredSize();
              setLocation(screenSize.width / 2 - (labelSize.width / 2), 
                                screenSize.height / 2 - (labelSize.height / 2));
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-11-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-10-20
                • 1970-01-01
                相关资源
                最近更新 更多