java - 未显示 JFrame 的内容

标签 java swing user-interface jframe visibility

我正在使用框架来显示消息,但框架的内容没有显示。 下面是我的 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); 

  }
  }

最佳答案

使用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);
    }
}

Note: As suggested by Camickr, I have started the Timer before the JFrame is shown. This increases accuracy for the duration(5seconds in your case) till which the JFrame will be visible.

关于java - 未显示 JFrame 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404558/

相关文章:

java - 为 Webview 捕获的 JPG 图像创建特定位置

java - 渲染到 JPanel 的最快方法是什么?

Python:Jupyter Notebook 创建运行代码的动态检查表用户输入

java - 调试 (i!=t++) 与 (t++!=i)

java - 如果 REST Web 服务调用失败,是否应该使用消息或事件队列稍后重试?

java - 使用枚举定义嵌套数据类型

java - Java 中的关键事件 - 初学者帮助

java - 如何获取 JTable 内的 JComboBox 值?

java - 子类调用父类的方法

C++ Autopatcher GUI(具有独特的皮肤)