Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Dialogo con JOptionPane

    Salve sto provando per esercitazione a creare una piccola battaglia navale.

    Vorrei fare un qualcosa del tipo:

    JOptionPane che dice una mia frase
    caricamento gui
    JOptionPane che dice una mia frase
    caricamento gui
    JOptionPane che dice una mia frase
    caricamento gui
    etc... finchè non ho inserito tutte le navi


    Il problema è che i JOptionPane dopo i caricamenti gui vengono caricati subito, invece in ogni caricamento di gui il programma dovrebbe aspettare che io clicco su un bottone per far capire al programma dove voglio mettere la nave. C'è qualche metodo per far aspettare un JOptionPane? So che JOptionPane può oscurare un altro contenitore, ma puo' un altro contenitore oscurare lui? (parlo del settaggio del parentContenitor)

    Al momento il codice è cosi
    codice:
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;
    
    public class BattagliaNavale {
    
    	private String nickname;
    	
    	private int[] campoUmanoAiuto;
    	private int[] campoUmanoGioco;
    	
    	private int lunghezza=5;
    	
    	
    	
    	public BattagliaNavale(){
    		
    		nuovaPartita();
    		
    		
    		setNickname(JOptionPane.showInputDialog("Inserisci il tuo nickname"));
    		int k=0,j=1, risp;
    		
    //Permette di inserire 1 nave da 4, 2 da 3, 3 da 2, 4 da 1	
    		while (j<5)
    		{	
    			lunghezza=5-j;
    			for (k=0;k<j;k++)
    			{
    				risp = JOptionPane.showConfirmDialog(null, "Vuoi inserire orizzontalmente?");
    				if (risp == JOptionPane.YES_OPTION)
    					guiInserimento(1);	
    				else if (risp == JOptionPane.NO_OPTION)
    					guiInserimento(2);
    				}
    			}
    		j++;
    	}
    	
    	public void nuovaPartita() {
    		
    		campoUmanoGioco = new int[100];
    		campoUmanoAiuto = new int[100];
    		
    		for (int i=0; i<100;i++){
    			campoUmanoAiuto[i]=0;
    			campoUmanoGioco[i]=0;
    		}
    	}
    
    	public void guiInserimento(final int verso){
    		
    		JFrame frameInserimento = new JFrame();
    		JPanel pannelloInserisciNavi = new JPanel(new GridLayout(11,11));
    		
    		JButton[] bottoniInserisci;
    		bottoniInserisci = new JButton[100];
    		
    		JLabel[] labelLettere;
    		labelLettere = new JLabel[11];
    		
    		JLabel[] labelNumeri;
    		labelNumeri = new JLabel[11];
    		
    		labelLettere[0] = new JLabel("");
    		for (int i=65;i<75;i++)
    			labelLettere[i-64]=new JLabel(String.valueOf("  " + (char)i));
    		
    		for (int i=0;i<11;i++)
    			labelNumeri[i]= new JLabel(String.valueOf(" " + i));
    		
    		for (int i=0;i<100;i++)
    				bottoniInserisci[i]= new JButton("");
    		
    		
    		for (int i=0;i<11;i++)
    		pannelloInserisciNavi.add(labelLettere[i]);
    		
    		for (int i=0;i<10;i++)
    			for (int j=0;j<11;j++)
    				
    				if (j==0)
    				pannelloInserisciNavi.add(labelNumeri[i+1]);
    				else if (j>0)
    					pannelloInserisciNavi.add(bottoniInserisci[i*10+j-1]);
    		
    		bottoniInserisci[0].addActionListener(new ActionListener() {
    			public void actionPerformed (ActionEvent e){
    				capta(0, verso);
    			}
    		});
    		
    // Mancano da implementare 99 listener per i bottoni
    
    		frameInserimento.add(pannelloInserisciNavi, BorderLayout.CENTER);
    		frameInserimento.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    		frameInserimento.setVisible(true);
    		frameInserimento.setBounds(200, 200, 300, 300);
    		frameInserimento.setTitle("Battaglia Navale");
    	}
    	
    	public void setNickname(String s){
    		nickname = s;
    	}
    	
    	public void capta(int numero, int verso){
    
    		for (int i=0;i<lunghezza;i++)
    		{
    			if (verso==1)
    				campoUmanoAiuto[i+numero]=1;
    			else if (verso==2)
    				campoUmanoAiuto[i*10+numero]=1;
    		}
    	}
    }
    codice:
    public class TestBattagliaNavale {
    
    
    	public static void main(String[] args) {
    		new BattagliaNavale();
    
    	}
    
    }
    Il problema è nel while dove vengono chiamati di continuo i JOptionPane e la guiInserimento

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Credo non si fermi perché in guiInserimento usi un JFrame e non una JDialog.
    al volante son nervoso

  3. #3
    ho cambiato il JFrame in Jdialog ma non cambia nulla

    come faccio a fare capire al jdialog che ho creato di stopparmi un certo JOptionPane che non si istanziano?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Un momento.
    Forse ho capito male io.
    Hai un ciclo while sulla variabile j.
    Ad ogni ciclo visualizza la JOptionPane: se dici si fa un cosa, se dici no ne fa un'altra, richiama la stessa funzione con un parametro differente.
    La guiInserimento crea un JFrame, un JPanel, delle JLabel e JButton che mette insieme e viene visualizzata.
    Da cosa ho capito del codice, la JFrame è la scacchiera su cui tu decidi tramite un JButton dove mettere la nave.

    Io sostituirei la JFrame con una JDialog modale, ossia che tiene il focus fino a che l'utente non la chiude o non sceglie un pulsante per chiuderla. Tipicamente è una JDialog Ok, Annulla.

    Poi forse continuo a non capire bene il codice. Smaltisco la sbornia di capodanno e riguardo il codice.
    al volante son nervoso

  5. #5
    nono, l'hai capito bene invece

    mi scriveresti la parte sul JDialog che deve sostituire il JFrame e riesce a colloquiare con JOptionPane dei cicli?

    grazie 1000

  6. #6
    uppino

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Non riesco a scriverti il codice, non ne sarei in grado.
    Cerca il tutorial della Sun sulle JDialog (da google lo trovi subito), così vedi come funzionano e facendo degli esempi semplici ne capisci la dinamica e come fare per il tuo problema.
    al volante son nervoso

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.