Não conheço como funciona este Observer,
mas o que necessito é somente que
a janela JDialog atualize o seu conteúdo.
spadinha
assim…
vc criou um dialog mostrando um status, entao vc deve ter algum listener que fica verificando esse status certo??
hora que o status mudar chame algum metodo que atualize a vizualizaçao do dialog.
R
r.marcio
Veja como está meu código:
importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;publicclasst4extendsJFrame{privateTelaEstadoNewtnew=newTelaEstadoNew();publict4(){getContentPane().setLayout(newFlowLayout());getContentPane().add(newJTextField("TESTES"));JButtonb=newJButton("OK");getContentPane().add(b);b.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){tnew.setTitle("Titulo 1");tnew.setMensagem("Titulo 2");tnew.setImagem("W95MBX041.jpg");tnew.setIcon("W95MBX041.jpg");tnew.showButtonCancel(true);tnew.showButtonContinue(true);tnew.showDialog();tnew.setVisible(true);Threadt=newThread(tnew);t.start();//Meus processamentos//Atualiza a mensagemtnew.setTitle("Mensagem 2");tnew.setVisible(true);intcont=0;while(cont<50000){cont++;try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}}cont=0;while(cont<50000){cont++;}//Ajusta o estado da classe de estado //para que ela encerre.tnew.setEstado(99);System.out.print("\n4");}});setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);pack();}publicstaticvoidmain(String[]args){t4t=newt4();t.setVisible(true);}}
A outra classe é :
importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjavax.swing.ImageIcon;publicclassTelaEstadoNewextendsJFrameimplementsRunnable{publicstaticfinalintCANCEL_BUTTON=1;publicstaticfinalintCONTINUE_BUTTON=2;/** Botão Continuar */protectedJButtonbtoContinuar;/** Botão Cancelar */protectedJButtonbtoCancelar;/** Indica o botão que foi selecionado no diálogo */privateintselectedButton;/** Flag que indica se irá exibir o botão Cancelar*/privatebooleanshowButtonCancel;/** Flag que indica se irá exibir o botão Continuar */privatebooleanshowButtonContinue;/** Label para exibir o icone */privateJLabellabel1;/** Label para exibir a imagem */privateJLabellabel2;/** Label para exibir o conteúdo da Mensagem na tela de estados*/privateJTextPanetextArea;/** Mensagem a ser exibida no diálogo*/privateStringmensagem="";/** Icone exibido ao lado da mensagem no diálogo*/privateImageIconicone;/** Imagem que será exibida abaixo do diálogo*/privateImageIconimagem;/** Indica a altura do diálogo*/protectedintheight;/** Indica a largura do diálogo*/protectedintwidth;privateintestado;publicTelaEstadoNew(){super();initialize();}publicvoidrun(){intcont=0;while(this.getEstado()==0){showDialog();this.setVisible(true);try{Thread.yield();Thread.sleep(1000);}catch(InterruptedExceptione){}if(showButtonCancel==true||showButtonContinue==true){this.estado=99;this.setVisible(false);}}}privatevoidinitialize(){getContentPane().removeAll();getContentPane().setLayout(null);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setLocation(150,150);setResizable(false);}privatevoidcreateFrame(){if(this.imagem==null){this.setSize(420,150);}else{this.setSize(420,400);}//Centralizar o DiálogoDimensionSCREEN_SIZE=Toolkit.getDefaultToolkit().getScreenSize();setLocation(SCREEN_SIZE.width/2-getWidth()/2,SCREEN_SIZE.height/2-getHeight()/2);//Obtém as medidas do diálogowidth=this.getSize().width;height=this.getSize().height;}protectedvoidsetSelectedButton(intsel){selectedButton=sel;this.hide();}publicvoidshowButtonCancel(booleanvalue){this.showButtonCancel=value;}publicvoidshowButtonContinue(booleanvalue){this.showButtonContinue=value;}publicintgetSelection(){returnthis.selectedButton;}publicvoidsetMensagem(Stringmsg){mensagem=msg;}publicsynchronizedvoidsetEstado(intEstado){this.estado=Estado;}publicsynchronizedintgetEstado(){returnthis.estado;}publicvoidsetIcon(Stringimg){this.icone=createImageIcon(img,"");}publicvoidsetImagem(Stringimg){if(img.compareToIgnoreCase("")>0){this.imagem=createImageIcon(img,"");}else{this.imagem=null;}}publicvoidshowDialog(){intx;createFrame();x=width/2-320/2;//Ajusta a área de exibição da mensagem.textArea=newJTextPane();textArea.setText(mensagem);textArea.setBounds(x+10,10,320,100);textArea.setFont(newFont("dialog",0,15));textArea.setForeground(SystemColor.controlText);textArea.setBackground(getContentPane().getBackground());textArea.setEditable(false);textArea.setAutoscrolls(false);getContentPane().add(textArea);textArea.repaint();//Ajusta a área de exibição do ícone.label1=newJLabel(icone,JLabel.CENTER);label1.setBounds(15,15,35,35);getContentPane().add(label1);//Verifica se existe imagem para exibir.if(this.imagem!=null){label2=newJLabel(imagem,JLabel.CENTER);label2.setBounds(width/2-((imagem.getIconWidth()+100)/2),height/2-((imagem.getIconHeight()+100)/2),imagem.getIconWidth()+100,imagem.getIconHeight()+100);getContentPane().add(label2);}//Exibe botões configurados.if(showButtonCancel){if(showButtonContinue){x=120;}else{x=this.width/2-100/2;}btoCancelar=newJButton();btoCancelar.setName("btoCancelar");btoCancelar.setBounds(105,this.height-80,100,30);btoCancelar.setText("Cancelar");btoCancelar.setFont(newFont("dialog",0,12));btoCancelar.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){setSelectedButton(CANCEL_BUTTON);}});this.getContentPane().add(btoCancelar);}if(showButtonContinue){if(showButtonCancel){x=230;}else{x=width/2-100/2;}btoContinuar=newJButton();btoContinuar.setName("btoContinuar");btoContinuar.setBounds(180,height-80,100,30);btoContinuar.setText("Continuar");btoContinuar.setFont(newFont("dialog",0,12));btoContinuar.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){setSelectedButton(CONTINUE_BUTTON);}});getContentPane().add(btoContinuar);btoContinuar.requestFocus();}getContentPane().repaint();getContentPane().setVisible(true);//setVisible(true);//this.getContentPane().repaint();}/** Retorna um objeto ImageIcon, ou null se o path for inválido. */privateImageIconcreateImageIcon(Stringpath,Stringdescription){java.net.URLimgURL=TelaEstadoNew.class.getResource(path);if(imgURL!=null){returnnewImageIcon(imgURL,description);}else{System.err.println("Arquivo de imagem não encontrado: "+path);returnnull;}}}
ViniGodoy
Seu código está rodando dentro do actionPerformed. E esse método é tratado na thread do Swing.
Por isso, o swing irá esperar que o código termine, antes de processar outras coisas, como a pintura de tela.
Aliás, não entendi qualé a daquele while enorme ali com um sleep dentro. O seu processamento mesmo está em outra thread, mas aquele while travando a execução não está certo.
Aliás, seu método run() também está esquisito… que tipo de processamento vc tá fazendo ali dentro?
Dê nomes mais significativos, pq eu não entendi o que a classe “t4” deveria fazer…