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; } } }Il problema è nel while dove vengono chiamati di continuo i JOptionPane e la guiInserimentocodice:public class TestBattagliaNavale { public static void main(String[] args) { new BattagliaNavale(); } }

Rispondi quotando
al volante son nervoso
