Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    JAVA [problema temporale con un Dialog Swing]

    ciao a tutti
    ho un dannato problema che i affligge ;

    ho creato un JFrame (MAINFRAME) che premendo un JButton ("inserisci")
    chiama il controller , che crea una finestra di Dialog (JDialog) con
    tutta una serie di elementi TextField (dove inserire i campi ) e una JButton ("OK") per confermare
    tutto questo deve creare un nuovo oggetto da aggiungere alla JCombo del MAINFRAME e scrivere su disco

    ora i problema è che temporalmente l applicazione non "sente" che ho premuto ok e quindi
    il nuovo oggetto non viene aggiunto al MAINFRAME , ma la scrittura su disco avviene (dopo) correttamente



    codice:
    public void insertHardware ()
    {
    ComponentHardware nuovo = new ComponentHardware () ; // creo una finestra JDialog personalizzata
    
    if (nuovo.getResult() == DialogResult.Ok)
    return true ;
    
    else throw new IllegalArgumentException () ; // spara sempre l eccezione e non sente che nel Dialog ho //premuto ok ; spara l  eccezione al momento che premo "inserisci" nel MAINFRAME , quindi prima
    }
    mi è stato suggerito che è un problema temporale e anche di usare una JOptionPane , ma....
    qualcuno può aiutarmi?

    grazie
    se non rispondo ai Pvt mandatemi una mail

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: JAVA [problema temporale con un Dialog Swing]

    Originariamente inviato da toni00c
    qualcuno può aiutarmi?
    Non possiamo fare molto senza sapere come hai implementato la classe ComponentHardware...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    ciao! non è altro che una classe che estende JDialog , dove sono presenti qualche TextField e JButton !

    i Listener (DocumentListener e ActionListener) funzionan perfettamente ...
    quando l utente preme Ok l applicazione dovrebbe creare un nuovo Item per la JCombo della MainFrame
    e scrivere su disco ,ma fa solo quest ultima cosa


    in effetti quando clicco su "inserisci" sul MainFrame si genera subito l'eccezione ..
    se non rispondo ai Pvt mandatemi una mail

  4. #4
    codice:
    
    package iCtek.ui;
    
    
    
    import iCtek.ui.DialogResult;
    
    import iCtek.controller.MyController;
    
    import iCtek.model.HardDisk;
    
    import iCtek.model.Hardware;
    
    import iCtek.model.SchedaVideo;
    
    import java.awt.BorderLayout;
    
    import java.awt.FlowLayout;
    
    import java.awt.GridLayout;
    
    import java.awt.event.ActionEvent;
    
    import java.awt.event.ActionListener;
    
    import java.io.IOException;
    
    import java.util.ArrayList;
    
    import javax.swing.JButton;
    
    import javax.swing.JDialog;
    
    import javax.swing.JLabel;
    
    import javax.swing.JOptionPane;
    
    import javax.swing.JPanel;
    
    import javax.swing.JTextField;
    
    import javax.swing.WindowConstants;
    
    import javax.swing.event.DocumentEvent;
    
    import javax.swing.event.DocumentListener;
    
    
    
    import Persistence.MyCatalogoWriter;
    
    
    
    
    
    
    
    public class NewComponentDialog extends JDialog  implements ActionListener ,  DocumentListener 
    
    {
    
    	private static final long serialVersionUID = 1L;
    
        private JTextField cat ;
    
        private JTextField marca ;
    
        private JTextField model ;
    
        private JTextField prezzo ;
    
        private JLabel lCat ;
    
        private JLabel lMarca ;
    
        private JLabel lModel ;
    
        private JLabel lPrezzo ;
    
    	private JButton ok ;
    
    	private JButton annulla ;
    
    	
    
    	
    
    	private ArrayList <String> lista ; // array di stringhe recuperate dai TextField
    
    	private Hardware hardware ; // oggetto solo di utilità
    
    	private MyController controller ;
    
    	private DialogResult chooce ;
    
    	
    
    	
    
    	
    
    	private String valueCat  ;
    
    	private String valueMarca  ;
    
    	private String valueModel  ;
    
    	private String valuePrezzo ;
    
    	
    
    	public NewComponentDialog()
    
    	{
    
    		//super();
    
    		lista = new ArrayList <String> () ;
    
    		initGUI() ;
    
    
    
    		setVisible(true); // da rivedere
    
    		
    
    	}
    
    	
    
    
    
    	
    
    	private void initGUI()
    
    	{
    
    		setTitle("Inserimento Componente");
    
    		setLayout(new BorderLayout ());
    
    		this.setSize(400, 200) ;
    
    		//setVisible(true) ;
    
    		
    
    	
    
    		
    
    		
    
    		JPanel pan1 = new JPanel () ;
    
    		pan1.setLayout(new GridLayout(5 ,1 )) ;
    
    		getContentPane().add(pan1 , BorderLayout.CENTER) ;
    
    	  
    
    		
    
    		
    
    		
    
    		JPanel panA = new JPanel () ;
    
    		panA.setLayout(new GridLayout (1 , 2)) ;
    
    		{
    
    			cat = new JTextField () ;
    
    			cat.getDocument().addDocumentListener(this) ;
    
    			cat.setEditable(true) ;
    
    			lCat = new JLabel () ;
    
    			lCat.setText("Categoria") ;
    
    			panA.add(lCat ) ;
    
    			panA.add(cat ) ;
    
    			
    
    		}
    
    		
    
    		
    
    		
    
    		
    
    		JPanel panB = new JPanel () ;
    
    		panB.setLayout(new GridLayout (1 , 2)) ;
    
    		{
    
    		
    
    		marca = new JTextField ();
    
    		marca.getDocument().addDocumentListener(this) ;
    
    		lMarca = new JLabel () ;
    
    		lMarca.setText("Marca") ;
    
    		panB.add(lMarca) ;
    
    		panB.add(marca ) ;
    
    		}
    
    		
    
    		
    
    		
    
    		
    
    		
    
    		JPanel panC = new JPanel () ;
    
    		panC.setLayout(new GridLayout (1 , 2)) ;
    
    		{
    
    		
    
    		model =  new JTextField () ;
    
    		model.getDocument().addDocumentListener(this) ;
    
    		lModel = new JLabel () ;
    
    		lModel.setText("Model") ;
    
    		panC.add(lModel) ;
    
    		panC.add(model) ;
    
    		}
    
    		
    
    		
    
    		
    
    		JPanel panD = new JPanel () ;
    
    		panD.setLayout(new GridLayout (1 , 2)) ;
    
    		{
    
    		prezzo = new JTextField () ;
    
    		prezzo.getDocument().addDocumentListener(this) ;
    
    		lPrezzo = new JLabel () ;
    
    		lPrezzo.setText("Fascia Prezzo") ;
    
    		panD.add(lPrezzo) ;
    
    		panD.add(prezzo ) ;
    
    		}
    
    		
    
    
    
    		
    
    		JPanel panE = new JPanel () ;
    
    		panE.setLayout(new FlowLayout ()) ;
    
    		{
    
    		ok = new JButton () ;
    
    		ok.setText("Ok") ;
    
    		ok.addActionListener(this) ;
    
    		
    
    		annulla = new JButton () ;
    
    		annulla.setText("Annulla") ;
    
    		annulla.addActionListener(this) ;
    
    		
    
    		panE.add(ok) ;
    
    		panE.add(annulla) ;
    
    		}
    
    		
    
    		
    
    		pan1.add(panA) ;
    
    		pan1.add(panB) ; // uso 4 FlowLayout 
    
    		pan1.add(panC) ;
    
    		pan1.add(panD) ;
    
    		pan1.add(panE) ;
    
    		
    
    		
    
    		
    
    	}
    
    
    
    	
    
    	
    
    	
    
    	@Override
    
    	public void actionPerformed(ActionEvent e)  {
    
    		if (e.getSource() == ok)
    
    		{
    
    			lista.add(valueCat)  ;
    
    			lista.add(valueMarca) ;
    
    			lista.add(valueModel) ;
    
    			lista.add(valuePrezzo) ;
    
    			
    
    			// devo recuperare il testo scritto nelle textField e creare una serie d Stringhe e dopo un nuovo hardware 
    
    		
    
    		     if (lista.size () != 0)
    
    		
    
    		     {
    
    		    	
    
    		     String cat = lista.get(0) ;
    
    		     String marca = lista.get(1) ;
    
    		     String model = lista.get (2) ;
    
    		     String price = lista.get(3) ;
    
    		     
    
    
    
    		    
    
    		     
    
    		    if (cat.contains ("SchedaVideo"))
    
    			{
    
    		    	setModalResultOk(); // setto il result a ok 
    
    		    	
    
    				  try {
    
    					 
    
    					  hardware = new  SchedaVideo (Double.parseDouble(price) , cat , marca , model) ;
    
    						 
    
    					   // salvo l istanza dell hardware in modo da poter fare l update a RunTime
    
    					  MyCatalogoWriter writer = new MyCatalogoWriter () ; // qui effettivamente scrive su disco e aggiorna il catalogo
    
    					  writer.Scrivi(hardware) ;
    
    					  controller.setLastUpdate(hardware) ;
    
    					  Close () ;
    
    					  JOptionPane.showMessageDialog(null, "Componente inserito correttamente") ;
    
    					  
    
    				      } 
    
    				  
    
    				  
    
    				  
    
    				  catch (IOException e1) {
    
    					System.out.println("errore" + e) ;
    
    					e1.printStackTrace();
    
    				}
    
    				  
    
    			
    
    			} // fine else
    
    				
    
    		     
    
    		   
    
    
    
    			
    
    			else if ( cat.contains( "HardDisk" ))
    
    				
    
    			{
    
    				hardware = new HardDisk  (Double.parseDouble(price) , cat , marca , model) ;
    
    				controller.setLastUpdate(hardware) ;
    
    				MyCatalogoWriter write = new MyCatalogoWriter () ;
    
    				try {
    
    					write.Scrivi(hardware) ;
    
    					JOptionPane.showMessageDialog(null, "Componente inserito correttamente") ;
    
    					Close () ;
    
    				    }
    
    				catch (IOException e1) {
    
    					System.out.println ("errore" + e) ;
    
    				}
    
    				
    
    			} // fine else 
    
    		     
    
    		    
    
    			 else   
    
    		       {
    
    		    	 throw new IllegalArgumentException ("errore hardware " + lista.get(0)) ;
    
    		       } 
    
    		     
    
    			
    
    		  }    // fine if 
    
    			
    
    		  
    
    		     
    
      } // fine pulsante ok
    
    		
    
    		else if (e.getSource() == annulla)
    
    		{
    
    			Close () ; // se è annulla chiamo il metodo close () ;
    
    		}
    
    	}
    
    	
    
    	
    
    
    
    
    
    	
    
    	private void setModalResultOk()
    
    	
    
    	{
    
    		
    
    		chooce = DialogResult.Ok ;
    
    	}
    
    	
    
    	
    
       public DialogResult getModalResult()
    
    	
    
    	{
    
    	  
    
    		return chooce  ;
    
    	}
    
       
    
       
    
       
    
    	
    
    	private void textFieldUpdated ()
    
    	{
    
    		try 
    
    		{
    
    			
    
    			valueCat = cat.getText () ;
    
    			valueMarca = marca.getText () ;
    
    			valueModel = model.getText () ;
    
    			valuePrezzo = prezzo.getText () ;
    
    			
    
    		}
    
    		
    
    		catch (Exception ex)
    
    		{
    
    		 System.out.println ("errore " + ex) ;
    
    		}
    
    	}
    
    	
    
    	
    
    	
    
    	@Override
    
    	public void insertUpdate(DocumentEvent e) {
    
    		textFieldUpdated () ;
    
    	}
    
    
    
    
    
    	@Override
    
    	public void removeUpdate(DocumentEvent e) {
    
    		textFieldUpdated () ;
    
    		
    
    	}
    
    
    
    
    
    	@Override
    
    	public void changedUpdate(DocumentEvent e) {
    
    		textFieldUpdated () ;
    
    		
    
    	}
    
    
    
    	
    
    	
    
    	
    
    	
    
    	
    
    	
    
    	public void Close() // metodo per chiudere la finestra di dialogo
    
    	{
    
    		this.setVisible(false);
    
    		if (getDefaultCloseOperation() == WindowConstants.EXIT_ON_CLOSE)
    
    		{
    
    			System.exit(0);
    
    		}
    
    		if (getDefaultCloseOperation() == WindowConstants.DISPOSE_ON_CLOSE)
    
    		{
    
    			dispose();
    
    		}
    
    	}
    
    	
    
    	
    
    	
    
    	
    
    	
    
    	
    
    	
    
    	public void setController (MyController controller)
    
    	{
    
    		this.controller = controller ;
    
    	}
    
    	
    
    	
    	
    
    	
    
    	
    
    	}



    qui c'è la Finestra Main che premendo il pulsante inserisci chiede al controller di creare il Dialog


    [/CODE]

    Override

    public void actionPerformed(ActionEvent e) {

    if (e.getSource() == inserisci)

    {



    controller.inserisciHardware() ; // metodo che chiama il controller per fare un insert





    }


    [/CODE]
    se non rispondo ai Pvt mandatemi una mail

  5. #5
    <OT>
    Almeno gli spazi dal codice potevi toglierli
    </OT>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    ciao è un po lungo lo so , ma non credo sia un problema di codice , quanto di logica
    qualcuno sa come si gestisce questo tipi di eventi?
    se non rispondo ai Pvt mandatemi una mail

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    allora il codice è un po' difficile da leggere per le extra white-line totalmente inutili. Comunque mi pare di capire che sull'ok alla JDialog, un certo oggetto venga aggiunto ad un certo ArrayList... ArrayList non è un componente Swing, per cui se da questa lista popoli una combobox o altro e non notifichi alla combobox che la lista è stata modificata, difficilmente vedrai la ComboBox mostrare la lista aggiornata.
    Potresti reistanziare la ComboBox con la lista aggiornata e ridisegnare il contenitore della combobox per rispecchiare le modifiche alla lista.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    ciao ! intanto grazie per la risposta

    il problema è temporale , nel senso che quando clicco su "inserisci" nel MainFrame
    lui "non attende" che inserisco i campi nella Dialog e che premo Ok in essa , ma mi lancia
    subito l eccezione ; nonostante ciò dopo m fa inserire i campi e premere Ok andando a scrivere su disco , ma di poter aggiunger la nuova Item alla JComboBox del MainFrame , NO!



    invece dovrebbe fare così :
    clicco su "inserisci"
    apre la finestra DIALOG
    inserisco i dati e premo OK
    E SOLO ADESSO MI DOVREBBE CREARE LA NUOVA ITEM
    se non rispondo ai Pvt mandatemi una mail

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    prova ad aprire il JDialog in modalità modale: dovresti usare altri costruttori (ora non ricordo la signature, ma dovrebbe essere il frame parent e un boolean che indica la modalità) e in quel caso non vai avanti se non chiudi il dialog (e dovresti risolverti il problema temporale).

  10. #10
    non sapevo si potesse fare anche un JDialog "normale" , credevo solo JOptionPane

    grazie oggi provo poi vi so dire!!

    Merci!!!!
    se non rispondo ai Pvt mandatemi una mail

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 © 2026 vBulletin Solutions, Inc. All rights reserved.