[英]How to run two frames at the same time in java
我正在尝试为程序创建一个加载屏幕,以便在加载主屏幕或执行特定任务时显示加载屏幕。 我试图使用JDialog作为加载屏幕,但是由于某种原因,一旦打开加载屏幕对话框,它就不会让主程序运行自己的工作。 如何使它们同时工作?
这是我的加载屏幕的代码:
public class FrmLoading extends JDialog {
private static FrmLoading loading;
public FrmLoading(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.setLocationRelativeTo(null);
}
public static void startAnimation(){
loading = new frmLoading(null, true);
loading.setVisible(true);
}
public static void stopAnimation(){
loading.dispose();
}
private void initComponents(){
//build the Dialog
}
}
这是我的用法:
private void login(){
FrmLoading.startAnimation();
//open main program
}
...
private void mainStart(){
//load contents
FrmLoading.stopAnimation();
}
我知道java swing有一个默认的加载屏幕,但我不想使用它,我想要我制作的动画。
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() {
//do your stuff in background
return null;
}
@Override
protected void done() {
frmMain.setVisible(true);
loading.dispose();
disposeThis(); //a method that calls this.dispose();
}
};
worker.execute();
loading.setVisible(true);
为什么根本不使用JFrame
加载屏幕。 考虑使用类似JWindow
东西:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JWindow;
public class LoadingScreenDemo extends JWindow{
Panel panel = new Panel();
public LoadingScreenDemo() {
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2){
dispose();
}
}
});
panel.setBackground(Color.YELLOW);
add(panel);
}
public static void main(String[] args) {
LoadingScreenDemo m = new LoadingScreenDemo();
m.setSize(640,480);
m.setLocationRelativeTo(null);
m.setVisible(true);
}
class Panel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setFont(new Font("Verdana",Font.BOLD,24));
g.drawString("Loading...", 270, 210);
g.setFont(new Font("Verdana",Font.PLAIN,14));
g.drawString("OS: "+System.getProperty("os.name"), 10,400);
g.drawString("OS version"+System.getProperty("os.version"), 10,420);
g.drawString("Java vendor: "+System.getProperty("java.vendor"), 10,440);
g.drawString("Java version: "+System.getProperty("java.version"), 10,460);
}
}
}
您可能不希望在JDialog构造函数中使用布尔型模态争论,而可以将JDialog构造函数与modality一起使用,并传入MODELESS枚举。
这可能会阻止主窗口被阻止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.