1

我正在使用显示消息的框架,但不显示框架的内容。下面是我的 MessageBox 框架的代码。

public class MessageBox extends javax.swing.JFrame {

/**
 * Creates new form MessageBox
 */
 public static String title=null,message=null;

public MessageBox(String message,String title) {

    initComponents();



}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    txtMessage = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowOpened(java.awt.event.WindowEvent evt) {
            formWindowOpened(evt);
        }
    });

    txtMessage.setBackground(new java.awt.Color(236, 233, 216));
    txtMessage.setOpaque(false);
    txtMessage.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            txtMessageActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(18, 18, 18)
            .addComponent(txtMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(31, 31, 31)
            .addComponent(txtMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(24, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

private void txtMessageActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}

private void formWindowOpened(java.awt.event.WindowEvent evt) {
    // TODO add your handling code here:
   this.setTitle(title);
   txtMessage.setText(message);
   txtMessage.revalidate();
   txtMessage.repaint();
   this.repaint();
}

/**
 * @param args the command line arguments
 */

// Variables declaration - do not modify
private javax.swing.JTextField txtMessage;
// End of variables declaration

public static void main(String args[]) {
    /*
     * Set the Nimbus look and feel
     */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /*
     * If Nimbus (introduced in Java SE 6) is not available, stay with the
     * default look and feel. For details see
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
     */

    //</editor-fold>

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            //  new ERPMainMenu().setVisible(true);
          new MessageBox(title,message).setVisible(true);
        }
    });
}

}

       public Class CallingClass
   {
        public CallingClass(){
   }
public caller(){
         MessageBox mb =new MessageBox("The  Data is saved successfully", "Success");

            mb.setLocation(400, 300);   
            mb.setVisible(true);
        try {
            Thread.sleep(5000);
 } catch(InterruptedException ex) {
Thread.currentThread().interrupt();
 }
            mb.setVisible(false); 

  }
  }
4

1 回答 1

3

使用javax.swing.Timer代替Thread.sleep(). 您的所有代码将如下所示:

MessageBox.java

import javax.swing.*;
import java.awt.event.*;
public class MessageBox extends javax.swing.JFrame 
{
    /**
    * Creates new form MessageBox
    */
    public static String title=null,message=null;
    public MessageBox(String message,String title) 
    {
        this.message = message;
        this.title = title;
        initComponents();
    }
    /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() 
    {

        txtMessage = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() 
        {
            public void windowOpened(java.awt.event.WindowEvent evt) 
            {
                formWindowOpened(evt);
            }
        });
        txtMessage.setBackground(new java.awt.Color(236, 233, 216));
        txtMessage.setOpaque(false);
        txtMessage.addActionListener(new java.awt.event.ActionListener() 
        {
            public void actionPerformed(java.awt.event.ActionEvent evt) 
            {
                txtMessageActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
        .addGap(18, 18, 18)
        .addComponent(txtMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
        .addGap(31, 31, 31)
        .addComponent(txtMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap(24, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>
    private void txtMessageActionPerformed(java.awt.event.ActionEvent evt) 
    {
        // TODO add your handling code here:
    }
    private void formWindowOpened(java.awt.event.WindowEvent evt) 
    {
        // TODO add your handling code here:
        this.setTitle(title);
        txtMessage.setText(message);
        txtMessage.revalidate();
        txtMessage.repaint();
        this.repaint();
    }
    /**
    * @param args the command line arguments
    */
    // Variables declaration - do not modify
    private javax.swing.JTextField txtMessage;
    // End of variables declaration
    public static void main(String args[]) 
    {
        /*
        * Set the Nimbus look and feel
        */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
        * If Nimbus (introduced in Java SE 6) is not available, stay with the
        * default look and feel. For details see
        * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        */

        //</editor-fold>
        java.awt.EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                CallingClass cl = new CallingClass();
                cl.caller();
            }
        });
    }
}



调用类.java

class CallingClass
{
    public CallingClass(){}
    public void caller()
    {
        final MessageBox mb =new MessageBox("The  Data is saved successfully", "Success");
        mb.setLocation(400, 300);   
        javax.swing.Timer timer = new javax.swing.Timer(5000,new ActionListener()
        {
            public void actionPerformed(ActionEvent evt)
            {
                mb.setVisible(false);
            }
        });
        timer.start();
        mb.setVisible(true);
    }
}

注意:正如 Camickr 所建议的,我已经在JFrame显示之前启动了 Timer。这会提高持续时间(在您的情况下为 5 秒)的准确性,直到该持续时间JFrame可见。

于 2013-03-14T09:12:22.103 回答