Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Attendere l'input

  1. #1

    Attendere l'input

    Salve,
    sto realizzando un applicativo grafico...
    ho una finestra...quando uno clicca su un pulsante si apre un'altra finestra con una JLabel dove uno deve inserire del testo poi spinge invio e il testo viene preso dalla finestra 'madre' ma non riesco a fare aspettare la finestra 'madre'

    cioè

    codice:
    package graphics;   
     import java.awt.event.ActionEvent; 
     import java.awt.event.ActionListener;    
    import javax.swing.JFrame; 
     import javax.swing.JTextField;   
     public class Get_test extends JFrame implements ActionListener{  	  	
    private String input;  	
    private String output;  	
    private JTextField text;  	  	
    public Get_test(String s) {  		
    super("JTextField");  		
    input=s;  		
    this.setBounds(150, 150, 200, 50);  		
    text= new JTextField();  		
    text.addActionListener(this);  		
    this.add(text);  		
    this.setVisible();		  	
    }  	
    public void actionPerformed(ActionEvent arg0) {  
    	output=text.getText();  		
    this.dispose();  	}  	
    public String getResult() {  		
    return output;  	}  
    }
    questo è la finestra che si apre quando uno clicca sul pulsante...in pratica è una jtextfield...e quando uno scrive ed invia salva il risultato in output e chiude la finestra...poi getResult restituisce il messaggio inserito

    ora il metodo che gestisce l'evento 'clicca sul pulsante per aprire la finestra':

    codice:
    	private void create_canale() throws InterruptedException {  		
    this.remove(graph);  		
    this.repaint();  		
    Get_test gt = new Get_test("canale");  		
    String result="";  		  		Thread.sleep(100000);  		
    while (result==null){  			
    result= gt.getResult();	  		
    } 		
    System.out.println(result);  		
    DefaultGraphCell vertex = createDefaultGraphCell();  		vertex = createVertex("World2", 190, 190, 70, 90, Color.blue, true);  		graph.getGraphLayoutCache().insert(vertex);  		this.add(graph);  		
    this.repaint();  	
    }
    in pratica tolgo quello che c'è sul pannello, poi invoco la classe Get_test che è quella di sopra poi non so come fare a fare quella chiamata aspettando il risultato

    cioè se faccio quel while lì, si pianta tutto e non mi fa scrivere nella jtextfield...ho provato anche la sleep ma non funziona neanche quello

    come dovrei fare? ho provato ad usare JDialog ma non se sono uscito fuori...

    Grazie a chi risponderà

    Daniele

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    La soluzione e' di usare una JDialog modale; niente while, sleep o altre cose del genere perche':
    1)Con tutta probabilità ti bloccano l'applicazione
    2)Sono solo uno spreco di CPU che lavora per non far niente.
    Una JDialog modale e' una finestrella che ti blocca il Frame principale fintanto che questa e' aperta. Se non hai esigenze particolari i metodi della classe JOptionPane ti forniscono delle finestre di dialogo preconfezionate per gli usi piu' comuni.
    QUESTA dovrebbe fare al caso tuo.
    Puo' essere utile anche la lettura del TUTORIAL

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.