我正在尝试完成此程序:1:请求用户在JOptionPane窗口中输入手机号码2:显示消息“单击确定以跟踪(输入)的GPS坐标3:用户单击确定后,应弹出启动屏幕。4:启动屏幕应完全完成,然后JOptionPane窗口应显示消息“位于GPS坐标内的地址是:“加上我输入的任何假地址。
现在,启动屏幕在其他所有操作中运行,并且所有操作都出现故障。我希望启动屏幕在单击“OK”后执行,然后完成并继续执行最后的JOptionPane消息。非常感谢您的帮助!!仅供参考,本节目旨在作为一个虚假的恶作剧。
public class SplashScreen extends JWindow {
static boolean isRegistered;
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(Color.green);
panel.setBounds(10, 10, 348, 150);
panel.setLayout(null);
container.add(panel);
JLabel label = new JLabel("Tracking target GPS coordinates...");
label.setFont(new Font("Verdana", Font.BOLD, 14));
label.setBounds(15, 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);
}
private void loadProgressBar() {
ActionListener al = new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
count++;
progressBar.setValue(count);
System.out.println(count);
if (count == 300) {
createFrame();
execute.setVisible(false);
timer1.stop();
}
}
private void createFrame() throws HeadlessException {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
};
timer1 = new Timer(50, al);
timer1.start();
}
public static void main(String[] args) {
execute = new SplashScreen();
String targetCell = JOptionPane.showInputDialog(null, "Enter "
+ "target cellphone number: ");
JOptionPane.showMessageDialog(null, "Click OK to "
+ "track the GPS coordinates of " + targetCell + "...");
JOptionPane.showMessageDialog(null, "The address located within "
+ "GPS coordinates is: " /** + "random fake address") **/);
}
};
你已经清楚地说出了你想要的,那么为什么不直接去做呢?:)
我猜您必须先显示2个JOptionPanes,将单元格编号保存在全局变量中,或者将其交给Splashscreen实例。在您的splashscreen完成后,显示带有您保存的手机号码的第三个任务窗格。
因此,您应该编辑actionPefromed方法,如下所示:
public void actionPerformed(java.awt.event.ActionEvent evt) {
count++;
progressBar.setValue(count);
System.out.println(count);
if (count == 300) {
execute.setVisible(false);
timer1.stop();
//splash screen finished so show JoptionPane here
JOptionPane.showMessageDialog(null, "The address located within "
+ "GPS coordinates is: " + targetCell)
}
}
你做事的顺序非常重要。如果您查看您的代码,SplashScreen
会在创建窗口时使其可见,这是一个坏主意,您会突然发现。
首先,你需要改变做事的顺序,例如。。。
String targetCell = JOptionPane.showInputDialog(null, "Enter "
+ "target cellphone number: ");
JOptionPane.showMessageDialog(null, "Click OK to "
+ "track the GPS coordinates of " + targetCell + "...");
// Show and wait for splash screen to complete
JOptionPane.showMessageDialog(null, "The address located within "
+ "GPS coordinates is: " /**
* + "random fake address") *
*/
);
您还需要某种方式让您的启动屏幕在完成任务时提供事件通知,因为JWindow
是无阻塞的。
一个更简单的解决方案是在模态JDialog
中显示闪屏,这将在闪屏可见时阻止代码的执行,允许您“等待”直到它完成。
作为一般的经验法则,您应该避免从像JWindow
这样的顶层容器扩展,而更喜欢像JPanel
这样的东西,这为您提供了在任何您想要的容器中显示组件的灵活性。
启动下一个窗口也不是闪屏的责任,它唯一的责任是显示它的活动进度(并可能返回它的计算结果)
比如说...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
String targetCell = JOptionPane.showInputDialog(null, "Enter "
+ "target cellphone number: ");
JOptionPane.showMessageDialog(null, "Click OK to "
+ "track the GPS coordinates of " + targetCell + "...");
SplashPane.showSplashScreen();
JOptionPane.showMessageDialog(null, "The address located within "
+ "GPS coordinates is: " /**
* + "random fake address") *
*/
);
}
});
}
public static class SplashPane extends JPanel {
private JProgressBar progressBar = new JProgressBar();
private Timer timer1;
public SplashPane() {
setLayout(new BorderLayout(0, 4));
setBorder(new EmptyBorder(10, 10, 10, 10));
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(new CompoundBorder(
new javax.swing.border.EtchedBorder(),
new EmptyBorder(30, 20, 30, 20)));
panel.setBackground(Color.green);
JLabel label = new JLabel("Tracking target GPS coordinates...");
label.setFont(new Font("Verdana", Font.BOLD, 14));
panel.add(label);
add(panel);
add(progressBar, BorderLayout.SOUTH);
loadProgressBar();
}
private void loadProgressBar() {
ActionListener al = new ActionListener() {
private int count;
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
count = Math.min(100, ++count);
progressBar.setValue(count);
System.out.println(count);
if (count == 100) {
SwingUtilities.windowForComponent(SplashPane.this).dispose();
timer1.stop();
}
}
};
timer1 = new Timer(150, al);
timer1.start();
}
public static void showSplashScreen() {
JDialog frame = new JDialog();
frame.setModal(true);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setUndecorated(true);
frame.add(new SplashPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
}
避免使用null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题
我是swift和Xcode新手,我想知道是否有人愿意向我解释,我应该如何让我的启动屏幕显示3秒钟,然后在这段时间内稍微淡出? 我想做一个我以前构建的网页的web视图,但希望它在启动屏幕之前淡出。 我已经阅读了所有其他与该主题相关的问题,但我不理解它们。我也一直在关注一些关于这个主题的教程,但什么都没有。 有人吗,拜托?
启动屏幕是一个用户对你应用的第一体验。 启动页面类型 占位 UI 品牌启动页面 启动页面类型 启动页面是用户对你应用的第一体验。 启动应用时,如果显示一个空白面板,会增加用户观察到的加载时间,考虑使用占位符 UI 或者一个品牌加载页面。 占位 UI 是最无缝的加载转换——适用于应用加载和应用内活动切换两者。 品牌启动页面提供了短暂的品牌曝光,让 UI 聚焦于内容上面。 品牌启动页面 占位 UI 占
我使用一个空活动为我的应用程序创建了一个启动屏幕,该活动在背景图像中保持可见3秒钟。通常,应用程序在背景图像变为可见之前以白色屏幕启动,然而,有些应用程序已经以“真实”的初始屏幕图像启动。如何实现这一点?
我正在用JavaFX制作一个桌面应用程序,我制作了一个仅出现5秒的启动屏幕,5秒后它会显示一个带有按钮的新阶段,当我单击按钮时,它会发送一个错误: 下面是JavaFX类 RootForm.java(启动屏幕) } RootForm.fxml(启动屏幕fxml) Error.fxml(带按钮的第二阶段) ErrorController.java(应该出现的第二阶段) 在我点击第二个屏幕上的按钮后,我
因此,我一直试图在我的android应用程序中添加启动屏幕,但每当我试图运行它时,应用程序总是崩溃。这里是代码`` activity_splash.xml
我已经创建了一个初始屏幕,它一开始工作得很好,但之后,它会向我显示一个白色空白屏幕,而不是我的初始屏幕图像文件。我不知道为什么会发生这种情况。 我试图改变我的风格.xml父主题,但有些主题使我的应用程序崩溃,只有主题.AppCompat.Light.NoActionBar可以工作,并给我一个空白的白屏。 styles.xml 飞溅.java 屏幕序列、线程Hibernate时间和其他一切都正常工作