Preciso criar um formulário que exiba uma mensagem por n segundos, mas somente quando for não modal. Porque se for modal a mensagem será exibido e operador deverá pressionar o botão Ok para cancelar. Após atingir o tempo o formulário deverá ser fechado automaticamente.
O código do formulário é esse :
/*
- frmMensagemPopup.java
/
import java.awt.;
import java.awt.event.;
import javax.swing.;
public class frmMensagemPopup extends javax.swing.JDialog {
public frmMensagemPopup(java.awt.Frame parent, boolean modal) {
super(parent, false);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
initComponents();
}
protected void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
cancel();
}
super.processWindowEvent(e);
}
public void cancel() {
dispose();
}
public void setLinha1(String valor){
linha1.setText(valor);
}
public void setLinha2(String valor){
linha2.setText(valor);
}
public void setLinha3(String valor){
linha3.setText(valor);
}
public void setLinha4(String valor){
linha4.setText(valor);
}
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel1 = new javax.swing.JPanel();
linha1 = new javax.swing.JLabel();
linha2 = new javax.swing.JLabel();
linha3 = new javax.swing.JLabel();
linha4 = new javax.swing.JLabel();
btnOk = new javax.swing.JButton();
getContentPane().setLayout(new java.awt.GridBagLayout());
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Mensagem do TEF");
jPanel1.setLayout(new java.awt.GridBagLayout());
jPanel1.setMinimumSize(new java.awt.Dimension(400, 66));
jPanel1.setPreferredSize(new java.awt.Dimension(400, 66));
linha1.setFont(new java.awt.Font("Verdana", 1, 10));
linha1.setForeground(new java.awt.Color(255, 0, 0));
linha1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
linha1.setText("Linha1");
linha1.setMaximumSize(new java.awt.Dimension(800, 16));
linha1.setMinimumSize(new java.awt.Dimension(400, 16));
linha1.setPreferredSize(new java.awt.Dimension(400, 16));
linha1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = 3;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
jPanel1.add(linha1, gridBagConstraints);
linha2.setFont(new java.awt.Font("Verdana", 0, 10));
linha2.setText("Linha2");
linha2.setMaximumSize(new java.awt.Dimension(800, 14));
linha2.setMinimumSize(new java.awt.Dimension(400, 14));
linha2.setPreferredSize(new java.awt.Dimension(400, 14));
linha2.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
jPanel1.add(linha2, gridBagConstraints);
linha3.setFont(new java.awt.Font("Verdana", 0, 10));
linha3.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
linha3.setText("Linha3");
linha3.setMaximumSize(new java.awt.Dimension(800, 14));
linha3.setMinimumSize(new java.awt.Dimension(400, 14));
linha3.setPreferredSize(new java.awt.Dimension(400, 14));
linha3.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
jPanel1.add(linha3, gridBagConstraints);
linha4.setFont(new java.awt.Font("Verdana", 0, 10));
linha4.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
linha4.setText("Linha4");
linha4.setMaximumSize(new java.awt.Dimension(800, 14));
linha4.setMinimumSize(new java.awt.Dimension(400, 14));
linha4.setPreferredSize(new java.awt.Dimension(400, 14));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
jPanel1.add(linha4, gridBagConstraints);
getContentPane().add(jPanel1, new java.awt.GridBagConstraints());
btnOk.setFont(new java.awt.Font("Verdana", 0, 10));
btnOk.setText("Ok");
btnOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnOkActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
getContentPane().add(btnOk, gridBagConstraints);
pack();
}
private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {
cancel();
}
public void setBtnOk(boolean valor){
btnOk.enable(valor);
}
public static void main(String args[]) {
new frmMensagemPopup(new javax.swing.JFrame(), false).show();
new frmMensagemPopup().show();
}
private javax.swing.JButton btnOk;
private javax.swing.JPanel jPanel1;
public static javax.swing.JLabel linha1;
public static javax.swing.JLabel linha2;
public static javax.swing.JLabel linha3;
public static javax.swing.JLabel linha4;
}
no programa que chama esta classe utilizo este metodo :
public void MensagemPopup(java.awt.Frame parent,
String linha1,
String linha2,
String linha3,
String linha4,
boolean ShowModal){
if ((!linha1.trim().equals("")) ||
(!linha2.trim().equals("")) ||
(!linha3.trim().equals("")) ||
(!linha4.trim().equals("")) ) {
final frmMensagemPopup fMensagem = new frmMensagemPopup(parent,ShowModal);
Dimension dlgSize = fMensagem.getPreferredSize();
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
fMensagem.setLocation((screen.width - dlgSize.width) / 2 , (screen.height - dlgSize.height) / 2 );
fMensagem.setLinha1(linha1);
fMensagem.setLinha2(linha2);
fMensagem.setLinha3(linha3);
fMensagem.setLinha4(linha4);
if (ShowModal){
fMensagem.setModal(true);
fMensagem.setBtnOk(true);
}else{
fMensagem.setModal(false);
fMensagem.setBtnOk(false);
}
fMensagem.pack();
fMensagem.show();
// cria uma tarefa para fechar o formulario, após
// após alguns segundos de exibição
if (!ShowModal){
int numberOfMillisecondsInTheFuture = Integer.parseInt(getTempoMensagem())*1000;
Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
// fecha o formulario de mensagem
fMensagem.cancel();
}
}, timeToRun);
}
}
}
Neste exemplo, o formulário é exibido durante o n segundos, mas como ele não é modal, ele não exibe as mensagens.
No meu formulário eu chamo este metodo da seguinte forma :
Exemplo :
MensagemPopup(this,“teste1”,“teste2”,“teste3”,“teste4”,false);
<mando imprimir algo …>