如何創建一個看起來像JPanel/JLabel的JFrame?我需要一個啓動畫面,當我的程序在顯示主窗口之前進行一些計算時(我知道Java中有一個啓動畫面選項,但我需要在加載類之後顯示,而不是在執行期間)顯示啓動畫面。獨立JPanel
我該如何創建?
如何創建一個看起來像JPanel/JLabel的JFrame?我需要一個啓動畫面,當我的程序在顯示主窗口之前進行一些計算時(我知道Java中有一個啓動畫面選項,但我需要在加載類之後顯示,而不是在執行期間)顯示啓動畫面。獨立JPanel
我該如何創建?
創建一個無修飾JFrame
這樣的:
JFrame frame = new JFrame();
frame.setUndecorated(true);
不過,我建議你使用java.awt.SplashScreen
,因爲它是一個已經被使用,在很多情況下,測試了一段代碼,所以它肯定是更穩定比你可以寫的還要多。
您不需要JFrame。這裏是一個使用JWindow的例子。
單擊該按鈕以顯示Spash屏幕,並通過單擊Spash屏幕將其隱藏。
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";
}
}
}
+1對於美麗的例子。 –