我正在使用框架显示消息,但不显示框架的内容。 下面是我的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);
}
}
答案 0 :(得分: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();
}
});
}
}
的 CallingClass.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
之前启动了计时器。这增加了持续时间的准确度(5秒 在您的情况下)JFrame
将可见。