2012-11-07 31 views
2

如何創建一個看起來像JPanel/JLabel的JFrame?我需要一個啓動畫面,當我的程序在顯示主窗口之前進行一些計算時(我知道Java中有一個啓動畫面選項,但我需要在加載類之後顯示,而不是在執行期間)顯示啓動畫面。獨立JPanel

我該如何創建?

回答

4

創建一個無修飾JFrame這樣的:

JFrame frame = new JFrame(); 
frame.setUndecorated(true); 

不過,我建議你使用java.awt.SplashScreen,因爲它是一個已經被使用,在很多情況下,測試了一段代碼,所以它肯定是更穩定比你可以寫的還要多。

4

您不需要JFrame。這裏是一個使用JWindow的例子。

單擊該按鈕以顯示Spash屏幕,並通過單擊Spash屏幕將其隱藏。

Spash screen

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.Properties; 

import javax.swing.*; 

public class Splashing { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Splashing"); 
       JButton splash = new JButton("Splash"); 
       JPanel orangePanel = new JPanel(); 
       orangePanel.setBackground(Color.orange); 
       frame.getContentPane().add(orangePanel, BorderLayout.CENTER); 
       frame.getContentPane().add(splash, BorderLayout.SOUTH); 
       splash.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         Splash s = new Splash(); 
         s.setVisible(true); 
        } 
       }); 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setMinimumSize(new Dimension(800, 450)); 
       frame.setLocationRelativeTo(null); // Center 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    static class Splash extends JWindow { 

     private final Properties sysProps = System.getProperties(); 

     public Splash() { 
      super(); 
      this.setAlwaysOnTop(true); 
      initListeners(); 
      initGUI(); 
      this.setVisible(false); 
     } 

     void initListeners() { 
      this.addMouseListener(new MouseAdapter() { 
       public void mouseClicked(MouseEvent e) { 
        Splash.this.setVisible(false); 
        Splash.this.dispose(); 
       } 
      }); 
     } 

     void initGUI() { 
      final Dimension preferredSize = new Dimension(480, 360); 
      setPreferredSize(preferredSize); 
      setMinimumSize(preferredSize); 
      setMaximumSize(preferredSize); 

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      this.setLocation((screenSize.width - 480) >> 1, (screenSize.height - 360) >> 1); 
      this.pack(); 
      repaint(); 
     } 

     public void paint(Graphics g) { 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
      // TODO Add an appropriate image here 
      //g2.drawImage(someImage, 0, 0, this); 
      drawAboutText2(g2); 
     } 

     void drawAboutText2(Graphics2D g2) { 
      g2.setFont(new Font("Verdana", Font.PLAIN, 10)); 
      g2.setColor(new Color(128, 130, 132)); 
      g2.drawString("All rights reserved", 20, 310); 
      g2.drawString("Author: To be decided", 20, 325); 
      g2.drawString("http://www.mywebsite.com", 20, 340); 

      g2.drawString(getBuild(), 260, 295); 
      g2.drawString(getJDK(), 260, 310); 
      g2.drawString(getVendor(), 260, 325); 
      g2.setColor(new Color(241, 101, 56)); // orange 

      g2.drawString(getLicensee(), 260, 340); 
     } 

     private String getBuild() { 
      return "Build# 427 on 15. June 2006"; 
     } 

     private String getJDK() { 
      return "JDK: " + sysProps.getProperty("java.version"); 
     } 

     private String getVendor() { 
      return "Vendor: " + sysProps.getProperty("java.vendor"); 
     } 

     private String getLicensee() { 
      return "Licensee: " + "John Doe"; 
     } 
    } 
} 
+0

+1對於美麗的例子。 –