Delay in displaying contents in JDialog
- by Yohan
Please have a look at the following code
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;
public class SendEmailForm extends JDialog {
private JLabel to, cc, bcc, subject, account;
private JTextField toTxt, ccTxt, bccTxt, subjectTxt;
private JTextArea messageTxt;
private JButton send;
private JComboBox accountBox;
private JScrollPane scroll;
private GridBagLayout gbl;
private GridBagConstraints gbc;
public SendEmailForm() {
//Declaring instance variables
to = new JLabel("To: ");
cc = new JLabel("CC: ");
bcc = new JLabel("BCC: ");
subject = new JLabel("Subject: ");
account = new JLabel("Select an Account: ");
toTxt = new JTextField(20);
ccTxt = new JTextField(20);
bccTxt = new JTextField(20);
subjectTxt = new JTextField(20);
messageTxt = new JTextArea(20, 50);
messageTxt.setLineWrap(true);
scroll = new JScrollPane(messageTxt);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
accountBox = new JComboBox();
accountBox.addItem("Yahoo");
accountBox.addItem("GMail");
accountBox.addItem("MSN");
//accountBox.addItem("Yahoo");
//accountBox.addItem("Yahoo");
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
send = new JButton("Send");
send.addActionListener(new SendButtonAction());
buttonPanel.add(send);
//Creating thr GUI
//GUI CREATION IS REMOVED IN THIS POST
this.setTitle("Send Emails");
this.setVisible(true);
this.pack();
this.setLocationRelativeTo(null);
this.validate();
}
private class SendButtonAction implements ActionListener {
public void actionPerformed(ActionEvent ae) {
ProgressMonitor pm = new ProgressMonitor();
//Retreiving the user name and password
List userData = new ArrayList();
EmailDBConnector emailCon = new EmailDBHandler();
userData = emailCon.getUserNameAndPassword(
accountBox.getSelectedItem().toString().trim());
String userName = userData.get(0).toString();
String password = userData.get(1).toString();
System.out.println(userName);
System.out.println(password);
pm.setVisible(true);
SendEmail sendEmail = new SendEmail(toTxt.getText(), userName.trim(),
bccTxt.getText(), ccTxt.getText(), accountBox.getSelectedItem().toString().trim(), messageTxt.getText().trim(),
password.trim(), subjectTxt.getText());
String result = sendEmail.send();
//pm.dispose();
JOptionPane.showMessageDialog(null, result);
}
}
private class ProgressMonitor extends JDialog {
public ProgressMonitor() {
this.setLayout(new BorderLayout());
JLabel text = new JLabel("Sending..Please wait...");
this.add(text, "Center");
this.pack();
this.validate();
this.setLocationRelativeTo(null);
}
}
}
First, this is an email program.
In here, when the JDialog is called, it just opens as a 100% blank window. I have added a JLabel, but it is not there when it is displaying. Anyway, it takes sometime to send the email, after the email is sent, I can see the JLabel in the JDialog. If I take my issue into one sentence, I am calling the JDialog before the email is sent, but it appears blank, after the email is sent, it's content are there! Why is this? Please help!