import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
/*
* Dialogfenster um beim Spielstart, den einzelnen Spielern Name und Farben zuzuweisen
* und um auszuwählen, ob der Spieler Mensch oder Computer sein soll
*/
public class SpielerAnzahlDialog extends JDialog implements ActionListener, ItemListener
{
private GridBagLayout gbl;
private GridBagConstraints gbc;
private JPanel pan;
private JCheckBox[] checkb;
private JLabel[] farbe;
private JTextField[] tf;
private JComboBox[] combob;
private JLabel lbl1,lbl2;
private JButton btnStarten, btnAbbrechen;
private int antwort = 0;
// Layout, des Spieler-Auswahlfensters
public SpielerAnzahlDialog(Frame owner, String titel)
{
super(owner, titel, true);
gbl = new GridBagLayout();
getContentPane().setLayout(gbl);
pan = new JPanel(new GridBagLayout());
setLocationRelativeTo(null);
checkb = new JCheckBox[4];
farbe = new JLabel[4];
tf = new JTextField[4];
combob = new JComboBox[4];
/*
* Größe des Fensters wird festgelegt, es wird mittig zum Bildschirm ausgerichtet
* und die Anderung der Größe wird ausgeschalten
*/
this.setSize(275,200);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation( (d.width - this.getWidth()) / 2,
(d.height - this.getHeight()) / 2);
this.setResizable(false);
farbe[0] = new JLabel("blau", JLabel.RIGHT);
farbe[1] = new JLabel("rot", JLabel.RIGHT);
farbe[2] = new JLabel("gelb", JLabel.RIGHT);
farbe[3] = new JLabel("grün", JLabel.RIGHT);
//Textzeile wird eingefügt
lbl1 = new JLabel("Boxen für Spielerauswahl aktivieren");
gbc = neueZelle(1,4,0,0,0,0);
gbc.insets =new Insets(5,1,1,1);
this.getContentPane().add(lbl1, gbc);
/*
* Da wir mit max 4 Spielern spielen, wird die Anordnung der Auswahlfelder
* in einer Schleife realisiert.
* Es wird zuerst jedes Erforderliche Element initialisiert.
* Dannach wird mit der Funktion neueZelle, genau diese mit Ihren Eigenschaften erschaffen
* und nun kann man das erzeugte Element hinzufügen
* Dies geschieht 4 mal
*/
for(int i=0; i<4; i++)
{
checkb[i] = new JCheckBox();
checkb[i].addItemListener(this); //zum Abfangen von Ereignissen wir der IL angebunden
checkb[i].setSelected(false); //alle Boxen werden default auf disable gesetzt
gbc = neueZelle(1,1,0,i+1,0,0);
this.getContentPane().add(checkb[i], gbc);
gbc = neueZelle(1,1,1,i+1,0,0);
this.getContentPane().add(farbe[i], gbc); //Farbenlabels werden implementiert
tf[i] = new JTextField("Spieler" + (i+1)); //default Spielername ist Spieler 1 , 2 etc
tf[i].setEditable(false); //solange der checkboxbutton nicht aktiviert ist, kann man den Namen nicht ändern
gbc = neueZelle(1,1,2,i+1,0,0);
this.getContentPane().add(tf[i], gbc);
combob[i] = new JComboBox(new String[] {"Mensch","Computer"}); //erstellt Combobox zur Auswahl des Spielertyps
combob[i].addActionListener(this);
combob[i].setEnabled(false); //solange der checkboxbutton nicht aktiviert ist,
//kann man den Typ nicht ändern
combob[i].setEditable(false); //editierbarkeit ist ausgeschalten
gbc = neueZelle(1,1,3,i+1,0,0);
this.getContentPane().add(combob[i], gbc);
}
//Leerzeile wird eingefügt
lbl2 = new JLabel("");
gbc = neueZelle(1,4,0,5,0,0);
gbc.insets =new Insets(5,5,5,5);
this.getContentPane().add(lbl2, gbc);
/*
* nun werden noch 2 Button, Starten und Beenden in das Dialogfenster implementiert
*/
btnStarten = new JButton("Starten");
btnStarten.addActionListener(this);
gbc = neueZelle(1,1,2,6,0,0);
this.getContentPane().add(btnStarten, gbc);
btnAbbrechen = new JButton("Abbrechen");
btnAbbrechen.addActionListener(this);
gbc = neueZelle(1,1,3,6,0,0);
this.getContentPane().add(btnAbbrechen, gbc);
}//end of SpielerAnzahlDialog
// ----- Logik des SpielerAnzahlDialogd Fenster--------------------------------
public void actionPerformed(ActionEvent ae)
{
Object object = ae.getSource();
if(object.equals(btnStarten))
{
//prüft wieviele Spieler teilnehmen
int SpielerAnz = 0;
for(int i=0 ; i<4; i++)
{
if(checkb[i].isSelected()== true)
SpielerAnz ++;
}
/*
*wenn mindestens 2 Spieler teilnehmen, wird überprüft, ob es sich um Computerspieler oder Menschliche
*handelt und die entsprechenden Werte werden übergeben. Dann startet das Spiel
*/
if (SpielerAnz > 1)
{
for(int i=0; i<4 ; i++)
{
if(checkb[i].isSelected())
{
if("Mensch".equals(combob[i].getSelectedItem()))
{
}
if("Computer".equals(combob[i].getSelectedItem()))
{
}
}
}
}
// wenn weniger als 2 Spieler ausgewählt sind erscheint eine Fehlermeldung
else
{
JOptionPane.showMessageDialog(this,
"Sie müssen mindestens zwei Spieler auswählen, um anfangen zu können!",
"Fehler",JOptionPane.ERROR_MESSAGE);
}
}
//Fenster wird wieder geschlossen
if(object.equals(btnAbbrechen))
antwort = 0;
setVisible(false);
dispose();
}
public int getAntwort()
{
return antwort;
}
/*
* Wenn der Benutzer einer der Checkboxen aktiviert, kann er den Namen des Spielers und dessen Typ auswählen
* Wenn die Checkbox deaktiviert wird, werden auch die entsprechenden Namen und Typfelder wieder deaktiviert
*/
public void itemStateChanged(ItemEvent ie)
{
for(int i=0; i<4; i++)
{
if (checkb[i] == ie.getItemSelectable())
{
tf[i].setEditable(!tf[i].isEditable());
combob[i].setEnabled(!combob[i].isEnabled());
i = 4;
}
}
boolean enabled = false;
for(int j=0; j<4; j++)
{
if (combob[j].isEnabled() && "Computer".equals( (String) combob[j].getSelectedItem()))
{
enabled = true;
}
}
}
//---- GridBagLayout aufbau ---------------------------------------------------
private GridBagConstraints neueZelle(int hoehe, int breite, int xpos, int ypos, double x_ausd, double y_ausd)
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets =new Insets(1,1,1,1);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = breite;
gbc.gridheight = hoehe;
gbc.gridx = xpos;
gbc.gridy = ypos;
gbc.weightx = x_ausd;
gbc.weighty = y_ausd;
return gbc;
}
}