显示问题的框架

时间:2010-05-24 06:01:56

标签: java swing jframe

我做了一个项目,显示了一家商店的库存 在该库存中,软件应该将产品的数据与其图像一起存储 有一个问题......
很多股票的Bcz,图像的屏幕正在加载需要花费很多时间 所以,我认为我应该给出标签上的框架,它将显示“加载软件” 但是现在当我为该帧设置visible = true时,但是该图像屏幕类加载问题的bcz我的帧没有正确显示。我放了screen shot,现在是我的代码。

JFrame f;
    try{
            f = new JFrame("This is a test");
            f.setSize(300, 300);
            Container content = f.getContentPane();
            content.setBackground(Color.white);
            content.setLayout(new FlowLayout());
            JLabel jl = new JLabel();
            jl.setText("Loading Please Wait....");
            content.add(jl);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }catch(Exception e){
            e.printStackTrace();
        }
        initComponents();
        try {
            addInverntory = new AddInventoryScreen(); 
            showstock = new showStock(); // this class will take big time.
            mf = new mainForm();
            f.setVisible(false);
        }catch (Exception ex) {
            ex.printStackTrace();
        }

在这种情况下,如何显示某些消息,其他类正在加载或“正在加载软件”。

只是为了知道......这个类不是图像加载的屏幕。

3 个答案:

答案 0 :(得分:3)

  1. 很难回答这个问题,因为不清楚调用new AddInventoryScreen();new showStock();的效果(Swing-wise)是什么。您应该只触摸用户最后看到的UI(完成所有处理后)。

  2. 你真的应该将需要很长时间的方法分解到自己的Thread中(参见SwingWorker。还有Java 5.0的替代方案)。这样,UI在处理时不会被阻止。

  3. 也许您想要的是Splash Screen

答案 1 :(得分:1)

在致电validate();

之前,请尝试拨打pack();f.setVisible(true);方法

您的代码可以是

validate();
pack();
f.setVisible(false);

答案 2 :(得分:1)

我认为您的代码中的一个大问题(可能不是唯一的问题)是您应该使用不同的线程进行长时间操作。

GUI操作(创建摆动组件,将它们添加到面板,更改标签......)将仅在“EDT”中执行,并且必须很短(通常小于100毫秒甚至50毫秒)。

如果您使用SwingWorker API(JDK 1.6的一部分),则可以通过其他线程轻松完成长时间操作。