# Anfänger Frage wie adden?



## Jack1995 (16. Apr 2012)

Hi 
also ich arbeite wie einem Thema kurz zuvor an einem TicTacToe Spiel. Bin ziemlicher Javaanfänger. Im Moment versuche ich eine Menüleiste zu machen also mit JMenubar und allem. Klappt soweit ganz gut. Aber wenn ich nun PlayerVSPlayer drücke will ich, dass er mir diese Klasse zu meinem bereits bestehendem Gui oder Fesnter addet.
Also bei Hauptklasse menuitem4 beim ActionListener:
Wie erreich ich das?Habs schon mit adden oder so versucht aber ich schaffs nicht.

Meine Hauptklasse:


```
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;



public class Gamewindow extends JFrame{

	private static final long serialVersionUID = 1L;	
	private final int breite,hoehe;
	private Dimension dim;
	PlayerVSPlayer p;
	
	public Gamewindow()
	{
		super("Tic Tac Toe");
		breite=200;
		hoehe=200;
		dim=new Dimension(breite,hoehe);
		
		JMenuBar menubar = new JMenuBar();
		setJMenuBar(menubar);
		JMenu menu = new JMenu("Hauptmenü");
		menubar.add(menu);
		JMenuItem menuItem = new JMenuItem("Neustart");
		menu.add(menuItem);
		menuItem.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent e)
            {
        		
        		
            }
        });  
		
		JMenuItem menuItem2 = new JMenuItem("Hilfe");
		menu.add(menuItem2);
		menuItem2.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	
            }
        });  
		JMenuItem menuItem3 = new JMenuItem("Beenden");
		menu.add(menuItem3);
		menuItem3.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	System.exit(1);
            }
        });  
		JMenuItem menuItem4 = new JMenuItem("PlayerVsPlayer");
		menu.add(menuItem4);
		menuItem4.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	
            }
        });
		
		setMaximumSize(dim);
		setMinimumSize(dim);
		setPreferredSize(dim);
		setLayout(new GridLayout(3, 0));
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);
		setLocationRelativeTo(null);
		
}
	}
```

Diese Klasse soll geaddet werden:

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;



public class PlayerVSPlayer extends Gamewindow{

	
	
	JButton[] b= new JButton[9];
	private boolean player=true;
	private int []feld ={0,0,0,0,0,0,0,0,0};
	
	
	
	
    public void erstellen(){
    	for(int i=0;i<9;i++)
		{
			if(i<3)
			{
			b[i] = new JButton(); 
			b[i].setLocation(200+i*50,100);
			}
			else if(i<6)
			{
			b[i] = new JButton(); 
		    b[i].setLocation(i*50+50,150);
			}
			else if (i<9)
			{
			b[i] = new JButton(); 
			b[i].setLocation(i*50-100,200);
			}
			
			b[i].setSize(50,50);
			b[i].addActionListener(new Actionhandler());
		
			
		
			
		}

			
    }
	
	private class Actionhandler implements ActionListener{

		
		public void actionPerformed(ActionEvent e) {
			
			if(e.getSource()==b[0])
			{   
				if(player)
				{
				b[0].setText("X");
				player=false;
				feld[0]=1;
				}
				else
				{b[0].setText("O");
				 player=true;
				 feld[0]=2;
				}
				b[0].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[1])
			{
				if(player)
				{
				b[1].setText("X");
				player=false;
				feld[1]=1;
				}
				else
				{b[1].setText("O");
				 player=true;
				 feld[1]=2;
				}
				b[1].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[2])
			{
				if(player)
				{
				b[2].setText("X");
				player=false;
				feld[2]=1;
				}
				else
				{b[2].setText("O");
				 player=true;
				 feld[2]=2;
				}
				b[2].setEnabled(false);
			}
			
			else if(e.getSource()==b[3])
			{
				if(player)
				{
				b[3].setText("X");
				player=false;
				feld[3]=1;
				}
				else
				{b[3].setText("O");
				 player=true;
				 feld[3]=2;
				}
				b[3].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[4])
			{
				if(player)
				{
				b[4].setText("X");
				player=false;
				feld[4]=1;
				}
				else
				{b[4].setText("O");
				 player=true;
				 feld[4]=2;
				}
				b[4].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[5])
			{
				if(player)
				{
				b[5].setText("X");
				player=false;
				feld[5]=1;
				}
				else
				{b[5].setText("O");
				 player=true;
				 feld[5]=2;
				}
				b[5].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[6])
			{
				if(player)
				{
				b[6].setText("X");
				player=false;
				feld[6]=1;
				}
				else
				{b[6].setText("O");
				 player=true;
				 feld[6]=2;
				}
				b[6].setEnabled(false);
				
			}
			
			else if(e.getSource()==b[7])
			{
				if(player)
				{
				b[7].setText("X");
				player=false;
				feld[7]=1;
				}
				else
				{b[7].setText("O");
				 player=true;
				 feld[7]=2;
				}
				b[7].setEnabled(false);
			}
			
			else if(e.getSource()==b[8])
			{
				if(player)
				{
				b[8].setText("X");
				player=false;
				feld[8]=1;
				}
				else
				{b[8].setText("O");
				 player=true;
				 feld[8]=2;
				}
				b[8].setEnabled(false);
				}
			
			//Gewinnen für Spieler 1
			if(feld[0]==1&&feld[1]==1&&feld[2]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			  
			}
			else if(feld[3]==1&&feld[4]==1&&feld[5]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[6]==1&&feld[7]==1&&feld[8]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[0]==1&&feld[3]==1&&feld[6]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[1]==1&&feld[4]==1&&feld[7]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[2]==1&&feld[5]==1&&feld[8]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[0]==1&&feld[4]==1&&feld[8]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			else if(feld[6]==1&&feld[4]==1&&feld[2]==1)
			{ JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
			}
			//Gewinnen für Spieler 2
			if(feld[0]==2&&feld[1]==2&&feld[2]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[3]==2&&feld[4]==2&&feld[5]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[6]==2&&feld[7]==2&&feld[8]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[0]==2&&feld[3]==2&&feld[6]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[1]==2&&feld[4]==2&&feld[7]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[2]==2&&feld[5]==2&&feld[8]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[0]==2&&feld[4]==2&&feld[8]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[6]==2&&feld[4]==2&&feld[2]==2)
			{ JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
			}
			else if(feld[0]!=0&&feld[1]!=0&&feld[2]!=0&&feld[3]!=0&&feld[4]!=0&&feld[5]!=0&&feld[6]!=0&&feld[7]!=0&&feld[8]!=0)
			{JOptionPane.showMessageDialog(null,"Unentschieden");restart();
				
			}
		}
		
	}
	public void restart()
	{   int eingabe = JOptionPane.showConfirmDialog(null,
            "Nochmal spielen?",
            "Einverständnis",
            JOptionPane.YES_NO_CANCEL_OPTION);
	    if(eingabe==0){
		feld[0]=feld[1]=feld[2]=feld[3]=feld[4]=feld[5]=feld[6]=feld[7]=feld[8]=0;
		b[0].setText("");b[1].setText("");b[2].setText("");b[3].setText("");b[4].setText("");b[5].setText("");b[6].setText("");b[7].setText("");b[8].setText("");
		b[0].setEnabled(true);b[1].setEnabled(true);b[2].setEnabled(true);b[3].setEnabled(true);b[4].setEnabled(true);b[5].setEnabled(true);b[6].setEnabled(true);b[7].setEnabled(true);b[8].setEnabled(true);
	    }
	    else if(eingabe==1)
	    	System.exit(1);
	    else {}
	}

}
```


----------



## Fu3L (16. Apr 2012)

Wieso erbt dein Spieler gegen Spieler Modus von deinem GameWindow?
Es sollte eher ein Panel sein und dann dem GameWindow hinzugefügt werden. Solltest du nicht wissen, wie du dann auf Methoden des GameWindows zugreifen kannst, dann mach es so:

```
class PVP extends JPanel {
   private GameWindow gw;
   public PVP(GameWindow gw) {
      this.gw = gw;
  }
}
```

Das wird erzeugt mit:

```
PVP p = new PVP(this);
```
(Natürlich musst du dann im ActionListener eine Methode aus dem GameWindow aufrufen, damit this auf die richtige Klasse zeigt. Das PVP Objekt kannst du dann deinem GameWindow per add hinzufügen.


----------



## Jack1995 (17. Apr 2012)

Wie schreibe ich den im gamelistener dann ne methode,damit this auf die richtige Klasse zeigt?;D


----------



## Fu3L (17. Apr 2012)

```
JMenuItem menuItem = new JMenuItem("PVP");
        menu.add(menuItem);
        menuItem.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent e)
            {
                startPVP();                
            }
        });
```


```
//Irgendwo im GameWindow:
private void startPVP() {
//Hier einfügen
}
```

Ungefähr so


----------



## Jack1995 (18. Apr 2012)

Ja ok so hatte ichs in einem vorherigen Versuch auch schon.Aber wennn ich jetzt im Gamewindow per add(p); wird nichts hinzugefügt;D
Ich hab schon versucht vielleicht mit Visible(true) klappt aber auch nicht.kanns sein dass das am GridLayout liegt oder wie? Es gibt keine Fehlermeldung sonder es verändert sich einfach nichts.


```
import java.awt.Dimension;
import java.awt.FlowLayout;
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.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;



public class Gamewindow extends JFrame{

	private static final long serialVersionUID = 1L;	
	private final int breite,hoehe;
	private Dimension dim;
	
	
	
	
	public Gamewindow()
	{
		super("Tic Tac Toe");
		breite=200;
		hoehe=200;
		dim=new Dimension(breite,hoehe);
		
		JMenuBar menubar = new JMenuBar();
		setJMenuBar(menubar);
		JMenu menu = new JMenu("Hauptmenü");
		menubar.add(menu);
		JMenuItem menuItem = new JMenuItem("Neustart");
		menu.add(menuItem);
		menuItem.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent e)
            {
        		
            }
        });  
		
		JMenuItem menuItem2 = new JMenuItem("Hilfe");
		menu.add(menuItem2);
		menuItem2.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	
            }
        });  
		JMenuItem menuItem3 = new JMenuItem("Beenden");
		menu.add(menuItem3);
		menuItem3.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	System.exit(1);
            }
        });  
		JMenuItem menuItem4 = new JMenuItem("Player");
		menu.add(menuItem4);
		menuItem4.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	 startPVP();
            }
        });  
		
		
		setMaximumSize(dim);
		setMinimumSize(dim);
		setPreferredSize(dim);
		setLayout(new GridLayout(3, 0));
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);
		setLocationRelativeTo(null);
		

}
	public void startPVP()
	{PvP p = new PvP(this);
	 add(p);
	 p.setVisible(true);
	 
	 }
}
```


```
public class PvP extends JPanel {
   
	private Gamewindow gw;
	private JButton[] b= new JButton[9];
	private boolean player=true;
	private int []feld ={0,0,0,0,0,0,0,0,0};
   
   
   public PvP(Gamewindow gw) {
      this.gw = gw;

   
	for(int i=0;i<9;i++)
    {
        if(i<3)
        {
        b[i] = new JButton(); 
        b[i].setLocation(200+i*50,100);
        }
        else if(i<6)
        {
        b[i] = new JButton(); 
        b[i].setLocation(i*50+50,150);
        }
        else if (i<9)
        {
        b[i] = new JButton(); 
        b[i].setLocation(i*50-100,200);
        }
        
        b[i].setSize(50,50);
        b[i].addActionListener(new Actionhandler());
        add(b[i]);
    
        
    
        
    }

        
}

private class Actionhandler implements ActionListener{

    
    public void actionPerformed(ActionEvent e) {
        
        if(e.getSource()==b[0])
        {   
            if(player)
            {
            b[0].setText("X");
            player=false;
            feld[0]=1;
            }
            else
            {b[0].setText("O");
             player=true;
             feld[0]=2;
            }
            b[0].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[1])
        {
            if(player)
            {
            b[1].setText("X");
            player=false;
            feld[1]=1;
            }
            else
            {b[1].setText("O");
             player=true;
             feld[1]=2;
            }
            b[1].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[2])
        {
            if(player)
            {
            b[2].setText("X");
            player=false;
            feld[2]=1;
            }
            else
            {b[2].setText("O");
             player=true;
             feld[2]=2;
            }
            b[2].setEnabled(false);
        }
        
        else if(e.getSource()==b[3])
        {
            if(player)
            {
            b[3].setText("X");
            player=false;
            feld[3]=1;
            }
            else
            {b[3].setText("O");
             player=true;
             feld[3]=2;
            }
            b[3].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[4])
        {
            if(player)
            {
            b[4].setText("X");
            player=false;
            feld[4]=1;
            }
            else
            {b[4].setText("O");
             player=true;
             feld[4]=2;
            }
            b[4].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[5])
        {
            if(player)
            {
            b[5].setText("X");
            player=false;
            feld[5]=1;
            }
            else
            {b[5].setText("O");
             player=true;
             feld[5]=2;
            }
            b[5].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[6])
        {
            if(player)
            {
            b[6].setText("X");
            player=false;
            feld[6]=1;
            }
            else
            {b[6].setText("O");
             player=true;
             feld[6]=2;
            }
            b[6].setEnabled(false);
            
        }
        
        else if(e.getSource()==b[7])
        {
            if(player)
            {
            b[7].setText("X");
            player=false;
            feld[7]=1;
            }
            else
            {b[7].setText("O");
             player=true;
             feld[7]=2;
            }
            b[7].setEnabled(false);
        }
        
        else if(e.getSource()==b[8])
        {
            if(player)
            {
            b[8].setText("X");
            player=false;
            feld[8]=1;
            }
            else
            {b[8].setText("O");
             player=true;
             feld[8]=2;
            }
            b[8].setEnabled(false);
            }
        
        //Gewinnen für Spieler 1
        if(feld[0]==1&&feld[1]==1&&feld[2]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
          
        }
        else if(feld[3]==1&&feld[4]==1&&feld[5]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[6]==1&&feld[7]==1&&feld[8]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[0]==1&&feld[3]==1&&feld[6]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[1]==1&&feld[4]==1&&feld[7]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[2]==1&&feld[5]==1&&feld[8]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[0]==1&&feld[4]==1&&feld[8]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        else if(feld[6]==1&&feld[4]==1&&feld[2]==1)
        { JOptionPane.showMessageDialog(null,"Spieler 1 hat gewonnen");restart();
        }
        //Gewinnen für Spieler 2
        if(feld[0]==2&&feld[1]==2&&feld[2]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[3]==2&&feld[4]==2&&feld[5]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[6]==2&&feld[7]==2&&feld[8]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[0]==2&&feld[3]==2&&feld[6]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[1]==2&&feld[4]==2&&feld[7]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[2]==2&&feld[5]==2&&feld[8]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[0]==2&&feld[4]==2&&feld[8]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[6]==2&&feld[4]==2&&feld[2]==2)
        { JOptionPane.showMessageDialog(null,"Spieler 2 hat gewonnen");restart();
        }
        else if(feld[0]!=0&&feld[1]!=0&&feld[2]!=0&&feld[3]!=0&&feld[4]!=0&&feld[5]!=0&&feld[6]!=0&&feld[7]!=0&&feld[8]!=0)
        {JOptionPane.showMessageDialog(null,"Unentschieden");restart();
            
        }
    }
    
}
public void restart()
{   int eingabe = JOptionPane.showConfirmDialog(null,
        "Nochmal spielen?",
        "Einverständnis",
        JOptionPane.YES_NO_CANCEL_OPTION);
    if(eingabe==0){
    feld[0]=feld[1]=feld[2]=feld[3]=feld[4]=feld[5]=feld[6]=feld[7]=feld[8]=0;
    b[0].setText("");b[1].setText("");b[2].setText("");b[3].setText("");b[4].setText("");b[5].setText("");b[6].setText("");b[7].setText("");b[8].setText("");
    b[0].setEnabled(true);b[1].setEnabled(true);b[2].setEnabled(true);b[3].setEnabled(true);b[4].setEnabled(true);b[5].setEnabled(true);b[6].setEnabled(true);b[7].setEnabled(true);b[8].setEnabled(true);
    }
    else if(eingabe==1)
        System.exit(1);
    else {}
}

}
```


----------



## Fu3L (18. Apr 2012)

```
public void startPVP() {
		PvP p = new PvP(this);
		add(p);
		validate();
		repaint();
	}
```

Das ist die Lösung


----------



## Jack1995 (18. Apr 2012)

Ah ok danke könntest du vielleicht wenns nicht zu viel Umstände macht kurz sagen was validate(); bedeutet?weil die anderen beiden methoden hätte ich gekannt aber validate kam moch nie in einem tutorial vor dass ich geshehen habe;D

Und sorry tut mir echt leid dass ich dauernd neue Fragen habe ich lern java erst seit 2monaten;D
letzte Frage: Ich hab ja nen GridLayout(3,0); gesetzt.wenn ich aber nun player aufruf packt er mir 4 buttons in eine Zeile anstatt wie früher 3. Hab schon probiert im Gridlayout zeilen zu verändern und hab auch schon probiert das GridLayout neu zu erstllen aber irgendwie gehts nicht. Aber ich wollte nur noch mal danke sagen für die Beantwortung meiner scheinbar nie endenden Fragen, aber es ist wirklich ein gutes Forum hier , wo einem bei Problemen geholfen wird.:applaus::applaus:


----------



## Fu3L (18. Apr 2012)

Er geht alle Komponenten durch und errechnet das Aussehen der GUI neu.



> public void validate()
> 
> Validates this container and all of its subcomponents.
> 
> ...


----------



## Jack1995 (18. Apr 2012)

Sorry ich weiß nicht ob meine änderung als neuer post angezeigt wird sorry;D nur sicherheitzshalber neuer post;D


----------



## Jack1995 (18. Apr 2012)

Ok passt schon habs gelöst;D Frage kann geschlossen werden danke für die Hilfe;D


----------

