Salve ragazzi, è il mio primo approccio alle GUI di Java e ho fino ad ora improntato la struttura del gioco.
Solo che non so come poter rendere 'visibili al click' gli elementi della matrice a SX. Sapreste darmi una mano?
Ecco il codice:
Solo che non so come poter rendere 'visibili al click' gli elementi della matrice a SX. Sapreste darmi una mano?
Ecco il codice:
Java:
package JavaHomeworks;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class BattagliaNavaleGUI
{
private JFrame frame;
private JTextField[][] matriceA;
private JTextField[][] matriceB;
private JButton[] bottoni;
private JLabel messaggio;
private JLabel EnemyNick;
private JLabel PlayerNick;
private String titoloFinestra;
private int numeroRigheA;
private int numeroColonneA;
private int numeroRigheB;
private int numeroColonneB;
private int numeroBottoni;
private JLabel CreditsTxt0;
private JLabel CreditsTxt1;
private JLabel CreditsTxt2;
private JLabel CreditsTxt3;
private JLabel regolaTitle;
private JLabel regola1;
private JLabel regola2;
private JLabel regola3;
private JLabel regola4;
/* INIZIO PARTE DA PERSONALIZZARE */
// Attributi dell'applicazione
/* FINE PARTE DA PERSONALIZZARE */
public BattagliaNavaleGUI()
{ /* INIZIO PARTE DA PERSONALIZZARE */
titoloFinestra = "Battaglia Navale";
numeroRigheA = 10;
numeroColonneA = 10;
numeroRigheB = 10;
numeroColonneB = 10;
numeroBottoni = 3;
/* FINE PARTE DA PERSONALIZZARE */
inizializza();
}
private void bottonePremuto(int numeroBottone)
{ /* INIZIO PARTE DA PERSONALIZZARE */
if(numeroBottone == 1)
{
setMessaggio("Avvio di una nuova partita!");
bloccaMatriceB();
setRandomA();
setRandomB();
}
if(numeroBottone == 2)
{
setMessaggio("Leggi le regole del gioco!");
regolamento();
}
if(numeroBottone == 3)
{
setMessaggio("Ecco chi ha realizzato il gioco!");
credits();
}
/* FINE PARTE DA PERSONALIZZARE */
}
public static void main(String[] args)
{
// AVVIO DEL GIOCO
BattagliaNavaleGUI p = new BattagliaNavaleGUI (); // Creazione Interfaccia
/* BOTTONI AZIONE */
p.setEtichettaBottone(1, "Avvia Partita");
p.setEtichettaBottone(2, "Regole del gioco");
p.setEtichettaBottone(3, "Crediti");
/* BOTTONI AZIONE */
}
private int randomize()
{
Random rand = new Random();
int max = 2;
int result = rand.nextInt(max);
return result;
}
private void setRandomA()
{
for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
matriceB[i][j].setText("" + randomize());
}
private void setRandomB()
{
for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
matriceB[i][j].setText("" + randomize());
}
private void setMessaggio(String m)
{ messaggio.setText(m);
}
private void setEtichettaBottone(int numeroBottone, String etichetta)
{ bottoni[numeroBottone-1].setText(etichetta);
}
private String[][] getMatriceA()
{ String[][] ret = new String[numeroRigheA][numeroColonneA];
for(int i=0;i<numeroRigheA;i++)
for(int j=0;j<numeroColonneA;j++)
ret[i][j] = matriceA[i][j].getText();
return ret;
}
private String[][] getMatriceB()
{ String[][] ret = new String[numeroRigheB][numeroColonneB];
for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
ret[i][j] = matriceB[i][j].getText();
return ret;
}
private void setMatriceA(String[][] A)
{ for(int i=0;i<numeroRigheA;i++)
for(int j=0;j<numeroColonneA;j++)
matriceA[i][j].setText(A[i][j]);
}
private void setMatriceB(String[][] B)
{ for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
matriceB[i][j].setText(B[i][j]);
}
private void bloccaMatriceA()
{
// Non sarà possibile scrivere nella matrice
for(int i=0;i<numeroRigheA;i++)
for(int j=0;j<numeroColonneA;j++)
matriceA[i][j].setEditable(false);;
}
private void sbloccaMatriceA()
{ for(int i=0;i<numeroRigheA;i++)
for(int j=0;j<numeroColonneA;j++)
matriceA[i][j].setEditable(true);;
}
private void bloccaMatriceB()
{ for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
matriceB[i][j].setEditable(false);;
}
private void sbloccaMatriceB()
{ for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
matriceB[i][j].setEditable(true);;
}
private int[][] convertiInMatriceIntera(String[][] m)
{ int nRighe=m.length;
int nColonne=m[0].length;
int[][] ret = new int[nRighe][nColonne];
for(int i=0;i<nRighe;i++)
for(int j=0;j<nColonne;j++)
if(m[i][j].equals(""))
ret[i][j]=0;
else
ret[i][j]=Integer.parseInt(m[i][j]);
return ret;
}
private String[][] convertiDaMatriceIntera(int[][] m)
{ int nRighe=m.length;
int nColonne=m[0].length;
String[][] ret = new String[nRighe][nColonne];
for(int i=0;i<nRighe;i++)
for(int j=0;j<nColonne;j++)
ret[i][j]=""+m[i][j];
return ret;
}
// Schermata del Regolamento
private void regolamento()
{
frame = new JFrame();
frame.getContentPane().setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try
{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{ System.out.println(e);
System.exit(0);
}
frame.setVisible(true);
frame.setBounds(100, 100, 600, 200);
frame.setTitle("Le Regole del gioco");
regolaTitle = new JLabel("REGOLAMENTO - HOW TO PLAY!");
frame.getContentPane().add(regolaTitle);
regolaTitle.setBounds(0, 10, 600, 60);
regolaTitle.setHorizontalAlignment(JLabel.CENTER);
regola1 = new JLabel("MatriceSX = Avversario (Computer).");
frame.getContentPane().add(regola1);
regola1.setBounds(0, 30, 600, 60);
regola1.setHorizontalAlignment(JLabel.CENTER);
regola2 = new JLabel("MatriceDX = Giocatore.");
frame.getContentPane().add(regola2);
regola2.setBounds(0, 50, 600, 60);
regola2.setHorizontalAlignment(JLabel.CENTER);
regola3 = new JLabel("All'avvio della partita saranno generate 2 matrici casuali.");
frame.getContentPane().add(regola3);
regola3.setBounds(0, 70, 600, 60);
regola3.setHorizontalAlignment(JLabel.CENTER);
regola4 = new JLabel("Clicca nuovamente 'Avvia Partita' per ricominciare.");
frame.getContentPane().add(regola4);
regola4.setBounds(0, 90, 600, 60);
regola4.setHorizontalAlignment(JLabel.CENTER);
}
// Schermata dei Crediti
private void credits()
{
frame = new JFrame();
frame.getContentPane().setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try
{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{ System.out.println(e);
System.exit(0);
}
frame.setVisible(true);
frame.setBounds(100, 100, 600, 200);
frame.setTitle("Crediti - Chi ha realizzato il gioco?");
CreditsTxt0 = new JLabel("CREDITI");
frame.getContentPane().add(CreditsTxt0);
CreditsTxt0.setBounds(0, 20, 600, 60);
CreditsTxt0.setHorizontalAlignment(JLabel.CENTER);
CreditsTxt1 = new JLabel("Questo gioco ispirato a Battaglia Navale");
frame.getContentPane().add(CreditsTxt1);
CreditsTxt1.setBounds(0, 40, 600, 60);
CreditsTxt1.setHorizontalAlignment(JLabel.CENTER);
CreditsTxt2 = new JLabel("è stato creato da Giuseppe A. Cotroneo");
frame.getContentPane().add(CreditsTxt2);
CreditsTxt2.setBounds(0, 60, 600, 60);
CreditsTxt2.setHorizontalAlignment(JLabel.CENTER);
CreditsTxt3 = new JLabel("come Homework per l'esame di Fondamenti d'Informatica - Modulo Java.");
frame.getContentPane().add(CreditsTxt3);
CreditsTxt3.setBounds(0, 80, 600, 60);
CreditsTxt3.setHorizontalAlignment(JLabel.CENTER);
}
// Schermata di gioco
private void inizializza()
{ frame = new JFrame();
frame.getContentPane().setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try
{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{ System.out.println(e);
System.exit(0);
}
frame.setVisible(true);
frame.setBounds(100, 100, 780, 360+30*numeroBottoni);
frame.setTitle(titoloFinestra);
// PopUp Message
messaggio = new JLabel("");
frame.getContentPane().add(messaggio);
messaggio.setBounds(240, 270, 300, 30);
messaggio.setHorizontalAlignment(JLabel.CENTER);
// Giocatori
EnemyNick = new JLabel("Avversario");
frame.getContentPane().add(EnemyNick);
EnemyNick.setBounds(50, 5, 300, 30);
EnemyNick.setHorizontalAlignment(JLabel.LEFT);
PlayerNick = new JLabel("Giocatore");
frame.getContentPane().add(PlayerNick);
PlayerNick.setBounds(180, 5, 300, 30);
PlayerNick.setHorizontalAlignment(JLabel.RIGHT);
bottoni=new JButton[numeroBottoni];
ActionListener listener = new PressioneBottoni();
for(int i=0;i<numeroBottoni;i++)
{ JButton bottone=new JButton();
bottone.setBounds(240, 300+30*i, 300, 30);
bottoni[i]=bottone;
bottone.addActionListener(listener);
frame.getContentPane().add(bottone);
}
matriceA = new JTextField[numeroRigheA][numeroColonneA];
for(int i=0;i<numeroRigheA;i++)
for(int j=0;j<numeroColonneA;j++)
{ JTextField campoTesto = new JTextField("");
frame.getContentPane().add(campoTesto);
campoTesto.setBounds(50+30*j, 60+20*i, 30, 20);
campoTesto.setHorizontalAlignment(JTextField.CENTER);
matriceA[i][j] = campoTesto;
}
for(int i=0;i<numeroRigheA;i++)
{ JLabel numeroRigaA = new JLabel(""+i);
frame.getContentPane().add(numeroRigaA);
numeroRigaA.setBounds(30, 60+20*i, 30, 20);
}
for(int j=0;j<numeroColonneA;j++)
{ JLabel numeroColonnaA = new JLabel(""+j);
frame.getContentPane().add(numeroColonnaA);
numeroColonnaA.setBounds(60+30*j, 40, 30, 20);
}
if(numeroRigheB != 0 || numeroColonneB != 0)
{ matriceB = new JTextField[numeroRigheB][numeroColonneB];
for(int i=0;i<numeroRigheB;i++)
for(int j=0;j<numeroColonneB;j++)
{ JTextField campoTesto = new JTextField("");
frame.getContentPane().add(campoTesto);
campoTesto.setBounds(430+30*j, 60+20*i, 30, 20);
campoTesto.setHorizontalAlignment(JTextField.CENTER);
matriceB[i][j] = campoTesto;
}
for(int i=0;i<numeroRigheB;i++)
{ JLabel numeroRigaB = new JLabel(""+i);
frame.getContentPane().add(numeroRigaB);
numeroRigaB.setBounds(410, 60+20*i, 30, 20);
}
for(int j=0;j<numeroColonneB;j++)
{ JLabel numeroColonnaB = new JLabel(""+j);
frame.getContentPane().add(numeroColonnaB);
numeroColonnaB.setBounds(440+30*j, 40, 30, 20);
}
}
bloccaMatriceA();
}
private class PressioneBottoni implements ActionListener
{ public void actionPerformed(ActionEvent e)
{ int numeroBottonePremuto = -1;
for(int i=0;i<numeroBottoni;i++)
if(e.getSource()==bottoni[i])
numeroBottonePremuto = i + 1;
bottonePremuto(numeroBottonePremuto);
}
}
}