求教JFrame和JDialog的问题

有个需求,在swing的JFrame中有上一条、下一条按钮,点击上一条,关闭当前JFrame,显示JDialog(JDialog中是一个不确定进度条),当下一个JFrame加载好了,关闭JDialog,显示JFrame。
问题是,当下一个JFrame加载完成之前,JDialog处于假死状态,显示不出来不确定进度条,任何文字都不会显示,当JFrame成功显示出来的时候,JDialog才会显示。打不到我想要的效果
求大神赐教,以下是效果图
这是个例子,是一个编辑界面

这个时候应该是显示进度条的,可现在是假死状态

等到后面的JFrame加载出来,才会显示进度条,打不到想要的效果

代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainFrame{

private JFrame mf = new JFrame();
private JButton previousRecordButton = null;
private JButton nextRecordButton = null;

public MainFrame(){
    Thread initThread = new Thread(new Runnable() {
        @Override
        public void run() {
            init();
        }
    });
    initThread.start();

    (new WaitDialog(mf, initThread)).start();// 启动等待提示框线程
    mf.setVisible(true);
}

public void init(){
    JPanel mainPane = new JPanel(null);
    previousRecordButton = new JButton("上一条");
    previousRecordButton.setBounds(20, 350, 100, 25);

    nextRecordButton = new JButton("下一条");
    nextRecordButton.setBounds(240, 350, 100, 25);

    previousRecordButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ae) {
            close();
            new DoOpen().open();
        }
    });
    nextRecordButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ae) {
            close();
            new DoOpen().open();
        }
    });


    mainPane.add(previousRecordButton);
    mainPane.add(nextRecordButton);

    mf.add(mainPane);
    // this.setUndecorated(true); // 除去title
    mf.setResizable(true);
    mf.setSize(390, 500);
    mf.setLocationRelativeTo(null); // 设置此窗口相对于指定组件的位置
    mf.setAlwaysOnTop(true);
}

public void close(){
    mf.dispose();
}

}


import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

/**

  • @ClassName: WaitDialog
  • @Description: TODO
  • @author Wangjj
  • @date 2016年8月16日 上午9:09:54
    */
    public class WaitDialog extends Thread {

    private JDialog dialog = null;

    private JLabel lbStatus;

    private JProgressBar progressBar;

    private JFrame parentFrame = null;

    private Thread currentThread = null;

    public WaitDialog(JFrame parentFrame, Thread currentThread) {
    this.parentFrame = parentFrame;
    this.currentThread = currentThread;
    initWaitDialogUI();// 初始化提示框
    }

    /**

    • 构建显示进度条的对话框
      */
      private void initWaitDialogUI() {
      dialog = new JDialog(parentFrame);

      JPanel mainPane = new JPanel(null);

      progressBar = new JProgressBar();
      progressBar.setIndeterminate(true);
      progressBar.setBounds(20, 20, 340, 15);

      lbStatus = new JLabel("正在加载, 请稍后 ...");
      lbStatus.setBounds(20, 60, 350, 25);

      mainPane.add(progressBar);
      mainPane.add(lbStatus);

      dialog.add(mainPane);
      // dialog.setUndecorated(true); // 除去title
      dialog.setModal(false);
      dialog.setResizable(true);
      dialog.setSize(390, 150);
      dialog.setLocationRelativeTo(null); // 设置此窗口相对于指定组件的位置
      (new DisposeWaitDialog(currentThread,dialog)).start();// 启动关闭提示框线程
      }

    public void run(){
    dialog.setAlwaysOnTop(true);
    dialog.setVisible(true);
    }

}


import javax.swing.JDialog;

public class DisposeWaitDialog extends Thread{
private Thread currentThread = null;
private JDialog clueDiag = null;

public DisposeWaitDialog(Thread currentThread, JDialog clueDiag) {
    this.currentThread = currentThread;
    this.clueDiag = clueDiag;
}

public void run() {
    try {
        currentThread.join();
    } catch (InterruptedException e) {
        System.out.println("Exception:" + e);
    }
    clueDiag.dispose();// 关闭提示框
}

}


public class DoOpen {

MainFrame mf = null;

public void open(){
    mf = new MainFrame();
}

public static void main(String[] args) {
    new DoOpen().open();
}

}


1个回答

这个东西难道不应该把代码贴出来吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JFrame 和 JDialog
我写了两个类一个a是类继承了JFrame, 一个b类继承JDialog, 在a类中new 一个b类,但是这两个窗都是活动的,我想让b活动,关掉b后a再活动怎样做到??rnrn谢谢各位高手
jdialog和jframe
jdialog由jframe弹出,jdialog上有输入框,我想在输入框输入文本后,按jdialog的确定按钮,把输入框的文本返回到jframe的一个label上。该如何做?
JFrame和JDialog
有这么个需求啊~~~rn一个JFrame 上 弹出一个JDialog,不是模态的。如果我现在去点击JFrame,这个JDialog则会跑到后面去。rn有没有什么方法能让JDialog不是模态的,但是永远都在JFrame前面。并且如果JFrame最小话,JDialog也要隐藏。rn???rn难道要用窗口监听吗?突然想到的 ..去试试 欢迎大神们提供思路
Jframe Jdialog问题
package mywork.wash;rnrnimport java.awt.BorderLayout;rnimport java.awt.FlowLayout;rnimport java.awt.event.ActionEvent;rnimport java.awt.event.ActionListener;rnimport java.sql.*;rnimport javax.swing.*;rnpublic class MainMenu extends JFrame implements ActionListenerrn private JButton inButton=new JButton("收衣"),rn outButton=new JButton("取衣"),rn manageButton=new JButton("财务管理"),rn workerButton=new JButton("员工"),rn memberButton=new JButton("会员"),rn inSure=new JButton("提交"),rn outSure=new JButton("取出");rn private JDialog jdialog;rn private JTextField text1=new JTextField("",10),rn text2=new JTextField("",10),rn text3=new JTextField("",10),rn text4=new JTextField("",10),rn text5=new JTextField("",10),rn text6=new JTextField("",10);rn public MainMenu()rn super("洗衣中心管理系统");rn this.add(inButton);rn this.add(outButton);rn this.add(manageButton);rn this.add(workerButton);rn this.add(memberButton);rn setLayout(new FlowLayout());rn setSize(500,400);rn setVisible(true);rn outButton.addActionListener(this);rn manageButton.addActionListener(this);rn workerButton.addActionListener(this);rn memberButton.addActionListener(this);rn inButton.addActionListener(this); rn rn public void actionPerformed(ActionEvent e)rn if (e.getSource()==inButton) rn jdialog=new JDialog(this,"收衣",true);rn jdialog.add(new JLabel("型号"));rn jdialog.add(text1);rn jdialog.add(new JLabel("会员号"));rn jdialog.add(text2);rn setLayout(new FlowLayout());rn jdialog.setSize(800,800);rnrn rn rn else if(e.getSource()==outButton)rn jdialog=new JDialog(this,"取出",true);rn jdialog.add(new JLabel("型号"));rn jdialog.add(text1);rn jdialog.add(new JLabel("会员号"));rn jdialog.add(text2);rn jdialog.add(inSure);rn inSure.addActionListener(this);rn jdialog.setSize(600,600); rn jdialog.setVisible(true);rn rnrn else if(e.getSource()==manageButton)rnrn else if(e.getSource()==workerButton)rn rn else rn rnrn public static void main(String[] args)rn new MainMenu();rn rnrnrndialog显示不正确啊 请问各位哪里出错了 愁~~
问一个与JFrame和JDialog的问题
为什么我用JB2006做界面时,JFrame和JDialog有时通过事件(点击按钮事件)调用后,界面可以打开但无法伸展开啊?我也用了setvisble(true)了!
自定义JFrame/JDialog标题栏
最近一直在做Flex,晚上看看世界杯,一些比赛真的很没劲 so,就想写写Swing,想起以前有人问过如何替换JFrame或者JDialog的标题栏,就动手写了写  提供了TitleFrame和TitleDialog两个顶层组件, 主要功能: 1、自定义标题栏 2、可以通过鼠标拖拽调整组件大小(可关闭resize功能) 3、设置图标和显示文字(文字可居中) 4、自定义右键菜单。  解决了以下问题:...
JDialog与JFrame之间传值的问题
JFrame上面有一个Button,点击Button,弹出一个自己设计的Dialog.(不是用JOptionPane.show`````dialog()).Dialog上面有TextFiled ,Button_2.点击Button_2,把JTextFiled的值传给JFrame的一个变量。请教:如何实现值的传递。最好有伪代码。谢谢大家!!!!!!
JFrame和JDialog的简单实现
import javax.swing.*; import java.awt.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //顶级容器JFrame的实例化 public class co...
JFrame和JDialog屏幕点击
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.*; import javax.swing.*; class MyJDialog extends JDialog {     /**   *   */  private static final lon
jframe弹出jdialog,jdialog传值给jframe,如何实现
jframe弹出jdialog,jdialog传值给jframe,或者在一个事件中,或者改变jframe的某个变量,该如何实现?
新人求教JDialog的问题
小弟纯粹一菜鸟,请问怎么才能实现类似WIN里设置字体功能?我写了个JDialog,本想对 public Dialog1(Frame2 owner, String title, boolean modal) 里的owner进行操作,可是不能点出他的组件和属性.有什么办法能解决吗?或者把值传到父界面?
JFrame和JDialog有何区别?
想要作一个程序,启动时出现一个框,要求用户输入用户名、口令等信息,点击按钮登录,如果密码正确,才会显示出程序的主界面。 rn rn我是新手+菜鸟,不太清楚在实际应用中JFrame和JDialog的区别。所以想问一下,登录框和主界面可以均用JFrame、均用JDialog还是某个必须用JFrame?换言之,JFrame和JDialog的区别怎么理解?
JFrame窗体和JDialog窗体的常用方法
JFrame窗体 JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗口中添加组件,同时为组件设置事件。由于该窗体继承了JFrame类,所以它拥有一些最...
请问java JDialog or JFrame的最小宽度
我用setBounds(0,0, 50, 100)去设置一个dialog or frame的大小时,发现总是不能成功,但是如果改成setBounds(0,0,200,300)就没有问题,我发现似乎对话框或者frame的最小宽度是123,不知道大家有没有注意到这个,rn还是我的程序有什么错误。如果我想让对话框的宽度很小,比如小于100,有什么办法吗?多谢指点
JDialog如何传值给JFrame
现有两个窗口,从JDialog获取的值要存到JFrame的JTable中,请问怎么实现。还有我设置了全局变量,但是出方法之后值就为0或者null 了。
初级问题,jdialog和jframe有何区别?
同上
关于JOptionPane,JDialog,JFrame移动问题.
我一个项目里有很多的JOptionPane,JDialog,JFrame.rn但是能不能不让它动.或者说不让它跑到屏幕可视范围之外.rn都不能有一点跑出当前屏幕.因为机子会连着好几个屏幕.不能让它们跑到其他屏幕上.rn所以我考虑一种是不让它出去最好,如果没办法,就只能让它们不能动了.rn请问是否有解决办法?
新手求教Jframe问题。。。。
弄了一个球队的界面 ,design preview是这样的[img=http://img.my.csdn.net/uploads/201303/02/1362210704_4838.jpg][/img]rn而运行后就变成下面这样了,谁能告诉下为什么。。。[img=http://img.my.csdn.net/uploads/201303/02/1362210756_4255.jpg][/img]
求教JFrame的问题
我想在JFrame中添加一个动态显示时间的组件,请问怎么实现.
Java窗口(JFrame)从零开始(2)——JDialog窗口
JDialog窗体是从一个窗体中弹出另一个窗体,就好像网页中的提示框一样 主要构造方法:JDialog() 创建一个没有标题并且没有指定 Frame 所有者的无模式对话框。 JDialog(Dialog owner) 创建一个没有标题但将指定的 Dialog 作为其所有者的无模式对话框。 JDialog(Dia...
如何关闭一个JDialog而不影响JFrame,我是一关JDialog连带JFrame也关了
如何关闭一个JDialog而不影响JFrame,我是一关JDialog连带JFrame也关了
同时显示一个JFrame和一个JDialog,在没有点击JDialog确定前不能点击JFrame,怎么做?
同上
如何在JDialog中呼出JFrame窗体
我在Dialog窗体中,直接实例化一个Frame窗体,然后调用这个Frame窗体的setVisible(true)方法。呼出Frame画面。rn但是Frame窗体中的控件不都可以操作,连Frame中的最小化Button都不能点击。rnrn请各位高人,指点一下我应该怎么操作。
请问如何设置JDialog,JFrame的宽度?
JDialog默认有一个最小的宽度,如果设置的宽度小于默认宽度,显示出来的还是rn默认的宽度。例如:setSize(new Dimension(0,0));高度没了,宽度还是有的。rnwhat is the matter?
在NetBeans中让JFrame和JDialog居中显示的方法
在NetBeans中让JFrame和JDialog居中显示的方法 1、JFrame在屏幕中居中显示,只须在主类的构造方法里面加上一句: setLocationRelativeTo(null); 例: [code="java"] public ClientFrame() { initComponents(); initComboB...
JFrame实现JDialog的效果,实现模式窗口
JFrame实现JDialog的效果 ,实现模式窗口
如何将一个JDialog定在一个JFrame内?????????????
如何将一个 JDialog 定在一个 JFrame 内?????????????rn让他不超过 JFrame 的边界?????????????
Swing程序设计---JFrame窗体和JDialog窗体
Swing组件:****Swing组件通常被称为“轻量级组件”,因为它完全由Java语言编写,而Java是不依赖操作系统的语言,它可以在任何平台上运行;相反,依赖于本地平台的组件被称为“重量级组件”,如AWT组件就是依赖本地平台的窗口系统来决定组件功能、外观和风格。加粗样式Swing组件主要有以下特点: 1、轻量级组件 2、可插入外观组件 ...
======请问jFrame与jDialog有什么不同?=====
请具体说一下吧,rn另外setVisible方法与show方法又有什么不同?rn=====rn谢谢!
如何将一个JFrame窗体变成JDialog弹出
小女子现在非常紧急,希望有高手指点,如何将一个JFrame窗体变成JDialog弹出,或者说怎样在Dialog里面添进自己想添的组件,比如多行文本框或者其他的东西,而不是系统默认自己生成的!!!!!!!!
Exception课后题 及JFrame及JDialog窗体练习
//Dialog 窗体练习 /* class MyJDialog extends JDialog{     public MyJDialog(MyFrame1 frame) {         super(frame,"first dialog",true);         Container container = getContentPane();         container.ad...
让JDialog随JFrame的移动而移动
从一JFrame触发一份JDialogrn怎么让他随JFrame的移动而移动
怎么先显示JFrame再显示JDialog?
我在做一个学生管理系统,我们的期末小项目。rnrn我想模拟SQL SERVER 2008的“SQL Server Management Studio”的登陆界面。就是显示了连接数据库的窗口,后面也会显示大的主窗口,只不过主窗口是不能操作的。rnrn是不是登陆窗口用的JDialog?主窗口是JFrame,然后将登录窗口设置为将主窗口作为父窗口的有模式Dialog?我这样设置了,可是它显示了登录窗口后不会显示主窗口,必须等登录窗口关闭时,才显示主窗口。rnrn请问怎么模拟SQL Server Management Studio的模式?rnrn
JDialog弹出JFrame窗口不能得到焦点!
在应用程序中有弹出一个JDialog窗口,由该窗口再弹出一个JFrame窗口,发现JFrame窗口不能使用,将JDialog传递到JFrame中,并设置JDialog.setenable(false)也没有用,请帮帮忙!谢谢!
初级问题, 如何将 jDialog 的内容付给JFrame上面的参数。
如题。rn现在需要将JDialog上面jTextField里面的内容付给再主界面上设置了几个String变量.rnrn多谢!
========= JDialog问题 =========
JFame采用自编写对话框,extends JDialog后,怎么给父系的Frame返回参数。返回字符串以及Hash表呢?rn谢谢!!!
JDialog问题
在一个JFrame里打开一个JDialog对话框,请问怎样确保JDialog始终在JFrame上面?rn谢谢!
JDialog的问题
按下JFrame的窗口中的一个按钮,弹出一个JDialog框,问怎样一直让这个JDialog框一直在最上层,直到JDialog框关掉,JFrame框才能用。
jdialog的问题
请问怎样让弹出的dialog居中显示,且一直居于父窗口的前面?谢谢!!
JDialog的问题!
JDialog的问题!rn如何设置JDialog的大小rn为什么设置它的setSize不起作用?rnrn如何让对话框成为模态的对话框呢?
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法