gpt4 book ai didi

java - 以编程方式创建带有文本的 SplashScreen 的最佳示例

转载 作者:行者123 更新时间:2023-12-02 13:24:16 28 4
gpt4 key购买 nike

我需要以编程方式创建一个 SplashScreen 并向其中添加文本(并更改它)。大多数示例都使用命令行参数。有没有可行的解决方案?

最佳答案

SwingWorker 中加载内容时,您可以使用带有背景图像和进度条的未修饰对话框。 。完成后,隐藏对话框并照常启动 UI。添加到对话框/启动画面的组件必须是非透明的,以便“看到”背景图像。

这是一个工作示例:

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestSplashScreen {

private JDialog dialog;
private JFrame frame;
private JProgressBar progress;

protected void initUI() throws MalformedURLException {
showSplashScreen();
SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {

@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i < 100; i++) {
Thread.sleep(100);// Simulate loading
publish(i);// Notify progress
}
return null;
}

@Override
protected void process(List<Integer> chunks) {
progress.setValue(chunks.get(chunks.size() - 1));
}

@Override
protected void done() {
showFrame();
hideSplashScreen();
}

};
worker.execute();
}

protected void hideSplashScreen() {
dialog.setVisible(false);
dialog.dispose();
}

protected void showSplashScreen() throws MalformedURLException {
dialog = new JDialog((Frame) null);
dialog.setModal(false);
dialog.setUndecorated(true);
JLabel background = new JLabel(new ImageIcon(new URL("http://blogs.dirteam.com/photos/sanderberkouwer/images/2157/original.aspx")));
background.setLayout(new BorderLayout());
dialog.add(background);
JLabel text = new JLabel("Loading, please wait...");
text.setForeground(Color.WHITE);
text.setBorder(BorderFactory.createEmptyBorder(100, 50, 100, 50));
background.add(text);
progress = new JProgressBar();
background.add(progress, BorderLayout.SOUTH);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}

protected void showFrame() {
frame = new JFrame(TestSplashScreen.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel ui = new JLabel("UI loaded and ready");
ui.setBorder(BorderFactory.createEmptyBorder(300, 300, 300, 300));
frame.add(ui);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
try {
new TestSplashScreen().initUI();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}

关于java - 以编程方式创建带有文本的 SplashScreen 的最佳示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16288303/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com