Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problema JoptionPane

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    5

    Problema JoptionPane

    salve a tutti, sono nuovo di questo forum e anticipatamente ringrazio tutti per la mano che mi potreste dare a risolvere questo problema.

    allora io ho questa classe:

    codice:
    package monopoly.client.gui;
     
    import java.awt.Frame;
    import java.awt.event.ActionEvent;
    import javax.swing.*; 
    import monopoly.tavola.Tavola;
    import monopoly.tavola.casella.Societa;
    import monopoly.tavola.casella.Stazione;
    import monopoly.tavola.casella.Terreno;
    import monopoly.util.Colori;
    
    public class DialogContratto extends JDialog  
    { 
    	public DialogContratto(Frame parent, String title, boolean modal) 
    	{
    	    super(parent, title, modal);
    	    
    	    try  
    	    {
    	    	//this.setSize(750, 450);
    	    	setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    	    	panel.setLayout(null);
    		    getContentPane().add(panel);
    		    
    		    contratto.setText("");
    			label.setText("Inserisci numero Casella ");
    			ok.setText("OK");
    			pane.setText(" ");
    	 
    			contratto.setBounds(250, 40, 50, 20);
    			label.setBounds(50, 40, 150, 20);
    			ok.setBounds(350, 40, 100, 20);
    			pane.setBounds(50, 100, 250, 250);
    	 
    			panel.add(contratto);
    			panel.add(label);
    			panel.add(ok);
    			panel.add(pane);
    			
    			pane.setEditable(false);
    			setVisible(true);
    			
    	    	if(title.equals("Stampa Terreno"))
    	    		jbInitTerreno();
    	    	else if(title.equals("Stampa Societa"))
    	    		jbInitSocieta();
    	    	else if(title.equals("Stampa Stazione"))
    	    		jbInitStazione();
    	    	
    	    	
    	    }
    	    catch (Exception ex) 
    	    {
    	      ex.printStackTrace();
    	    }
    	}
    	
    	public DialogContratto(String title) 
    	{
    	    this(null, title, false);
    	    
    	    System.out.println("Altezza" + this);
    	    panel.setLayout(null);
    	    getContentPane().add(panel);
    	    
    	    contratto.setText("");
    		label.setText("Inserisci numero Casella ");
    		ok.setText("OK");
    		pane.setText(" ");
     
    		contratto.setBounds(250, 40, 50, 20);
    		label.setBounds(50, 40, 150, 20);
    		ok.setBounds(350, 40, 100, 20);
    		pane.setBounds(50, 100, 250, 250);
     
    		panel.add(contratto);
    		panel.add(label);
    		panel.add(ok);
    		panel.add(pane);
    		
    		pane.setEditable(false);
    		setVisible(true);
    		
    	    if(title.equals("Stampa Terreno"))
        		jbInitTerreno();
        	else if(title.equals("Stampa Stazione"))
        		jbInitStazione();
        	else if(title.equals("Stampa Societa"))
        		jbInitSocieta();
    		
    	   
    	}
     
    	private void jbInitTerreno()
    	{
    		int x = 350, y = 100;
    		
    		Colori coloreTerreno = null;
    		
    		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
    		{
    			if(Tavola.getInstance().getCasella(i) instanceof Terreno)
    			{				
    				Terreno terreno =  (Terreno) Tavola.getInstance().getCasella(i);
     
    				if(coloreTerreno == null)
    					coloreTerreno = terreno.getColore();
    				if(coloreTerreno.equals(terreno.getColore()))
    				{
    					JLabel label = new JLabel(i + " - " + terreno.getNome());
    					label.setBounds(x, y, 150, 20);
    					panel.add(label);
    					y += 20;
    				}
    				else
    				{
    					y += 20;
     
    					if(y + 60 > 450)
    					{
    						y = 100;
    						x = 550;
    					}
     
    					coloreTerreno = terreno.getColore();
    					JLabel label = new JLabel(i + " - " + terreno.getNome());
    					label.setBounds(x, y, 150, 20);
    					panel.add(label);
    					y += 20;
    				}
    			}
    		}
     
    		ok.addActionListener(new java.awt.event.ActionListener()
    		{
    			public void actionPerformed(ActionEvent e)
    			{
    				try
    				{
    					int numContratto = Integer.parseInt(contratto.getText());
    				
    					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
    					{
    						if (Tavola.getInstance().getCasella(numContratto) instanceof Terreno)
    							pane.setText(((Terreno)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
    						else
    							pane.setText("Non è una Casella Terreno");
    					}
    					else
    					{
    						pane.setText("Il numero inserito non è valido");
    					}
    				}
    				catch(NumberFormatException ex)
    				{
    					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
    				}
    			}
    		});
    	}
    
    	private void jbInitStazione()
    	{
    		int x = 350, y = 100, j = 0;
     
    		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
    		{
    			if(Tavola.getInstance().getCasella(i) instanceof Stazione)
    			{
    				JLabel label = new JLabel(i + " - " + Tavola.getInstance().getCasella(i).getNome());
    				label.setBounds(x, y, 150, 20);
    				panel.add(label);
    				y += 20;
    				j++;
    			}
    		}
     
    		ok.addActionListener(new java.awt.event.ActionListener()
    		{
    			public void actionPerformed(ActionEvent e)
    			{
    				try
    				{
    					int numContratto = Integer.parseInt(contratto.getText());
    				
    					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
    					{
    						if (Tavola.getInstance().getCasella(numContratto) instanceof Stazione)
    							pane.setText(((Stazione)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
    						else
    							pane.setText("Non è una Casella Stazione");
    					}
    					else
    					{
    						pane.setText("Il numero inserito non è valido");
    					}
    				}
    				catch(NumberFormatException ex)
    				{
    					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
    				}
    			}
    		});
    	}
    	
    	private void jbInitSocieta()
    	{		
    		int x = 350, y = 100, j = 0;
     
    		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
    		{
    			if(Tavola.getInstance().getCasella(i) instanceof Societa)
    			{
    				JLabel label = new JLabel(i + " - " + Tavola.getInstance().getCasella(i).getNome());
    				label.setBounds(x, y, 150, 20);
    				panel.add(label);
    				y += 20;
    				j++;
    			}
     		}
     
    		ok.addActionListener(new java.awt.event.ActionListener()
    		{
    			public void actionPerformed(ActionEvent e)
    			{
    				try
    				{
    					int numContratto = Integer.parseInt(contratto.getText());
    				
    					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
    					{
    						if (Tavola.getInstance().getCasella(numContratto) instanceof Societa)
    							pane.setText(((Societa)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
    						else
    							pane.setText("Non è una Casella Societa");
    					}
    					else
    					{
    						pane.setText("Il numero inserito non è valido");
    					}
    				}
    				catch(NumberFormatException ex)
    				{
    					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
    				}
    			}
    		});
    	}
     
    	private static final long serialVersionUID = 1L;
    	private JPanel panel = new JPanel();
    	private static JTextField contratto = new JTextField();
    	private JButton ok = new JButton();
    	private JLabel label = new JLabel();
    	private JEditorPane pane = new JEditorPane();
    }
    ogni volta che si attivano i JOptionPane.showMessageDialog e clicco la prima volta su ok si riapre di nuovo e solo allora cliccando di nuovo su ok si chiude la finestra di dialogo.
    spero in un vostro aiuto e spero di essere stato chiaro

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema JoptionPane

    Originariamente inviato da Lucas83
    ogni volta che si attivano i JOptionPane.showMessageDialog e clicco la prima volta su ok si riapre di nuovo e solo allora cliccando di nuovo su ok si chiude la finestra di dialogo.
    spero in un vostro aiuto e spero di essere stato chiaro
    Per un motivo abbastanza semplice. Hai fatto 2 costruttori. Quello che riceve solo un String invoca l'altro costruttore ma poi ripete gran parte delle inizializzazioni ... compreso l'addActionListener sul pulsante. Quindi ne vengono aggiunti 2 distinti. Ogni volta che premi il pulsante entrambi i listener vengono invocati.

    Se il secondo costruttore è solo un "caso specifico" di invocazione dell'altro, limitati solo ad invocare this(..) senza ripetere le inizializzazioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    5
    quindi il secondo costruttore lo faccio cosi:

    codice:
    public DialogContratto(String title) 
    	{
    	    this(null, title, false);   
    	}
    grazie mille per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Sì, così.

    Nel primo costruttore hai catturato Exception. Qui è da valutare ... nessuna delle istruzioni che esegui nel costruttore lancia eccezioni "checked", quindi non sarebbe necessario. Certo ... tecnicamente le eccezioni unchecked possono sempre capitare ma se catturi e fai solo un printStackTrace il tuo oggetto DialogContratto, nel caso di una eccezione unchecked, potrebbe trovarsi in uno stato non completo e il chiamante non potrebbe saperlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    5
    quindi elimino dal costruttore il costrutto try/catch

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    5
    oppure al posto di printStackTrace ci metto una JOptionPane.showMessageDialog con la scritta "errori generici" ?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lucas83
    quindi elimino dal costruttore il costrutto try/catch
    Sì, è meglio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    5
    grazie mille per l'aiuto andbin

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.