# Mausklick auf Fenster in Verbindung zu RadioButtons



## tiimo (2. Mrz 2011)

Habe eine Frage.

Ich programmiere momentan Schiffe Versenken.

Habe ein Fenster erstellt, in dem zwei Panels sind. 
Auf einem Panel findet sich das Spielfeld...auf dem anderen sind RadioButtons zur Auswahl eines Schiffes (wie lang und ob vertikal oder horizontal)

Jetzt möchte ich bei Klick auf das "SpielfeldPanel" die RadioButtons vom andern Panel auswerten.
Also wenn ein bestimmter Button gewählt ist, soll bei Klick auf das Spielfeld etwas bestimmtes passend zum RadioButton passieren.

Wie kann ich die Dinge verknüpfen, sodass ich Zugriff auf den aktuell gewählten RadioButton habe?

Danke mal im Voraus, 
falls jemand mein Anliegen kapiert


----------



## Simon_Flagg (2. Mrz 2011)

die radiobuttons müsstest du in einer buttongroup haben und bei der gibts denk ich group.getSelection().getSelectedObjects() und da steht dann drinnen, was selektiert ist....

lg


----------



## tiimo (3. Mrz 2011)

Das Problem ist nicht, zu wissen, was ausgewählt wurde,
sondern, wie ich auf dieses Wissen außerhalb der Klasse Zugriff bekomme...


----------



## xehpuk (3. Mrz 2011)

Über eine Referenz auf das RadioButtonPanel.


----------



## tiimo (3. Mrz 2011)

Hier die Klasse 1 (Fenster, in das geklickt wird)

Wichtig ist der Ausschnitt: 
if /*RADIOBUTTON1 GEWÄHLT*/ 
System.out.println("Button1 gewählt");


```
package spielfenster;

import ... 

public class ZeichneSpielfenster extends JComponent {
	private static final long serialVersionUID = 1L;

	private BufferedImage[][] bImgArrMeinFeld, bImgArrGegnerfeld;
	private BufferedImage bImgHintergrund;
    
    public ZeichneSpielfenster(int xsize, int ysize) throws IOException 
    {
        bImgHintergrund = new BufferedImage(xsize, ysize , BufferedImage.TYPE_INT_RGB);
        bImgArrMeinFeld = new BufferedImage[10][10];
        bImgArrGegnerfeld = new BufferedImage[10][10];
        
        // Hintergrund (schwarz)
                
        for(int i=0; i<xsize ; i++)
        	for (int j=0; j<ysize; j++)
           	bImgHintergrund.setRGB(i, j, 0);
        
        // Eigenes Feld vorinitialisieren mit "Wasser"
        SetzeFeld neu = new SetzeFeld();
        
        for (int i=0; i<10; i++)
        	for (int j=0; j<10; j++)
        	neu.setzeFeldteil(bImgArrMeinFeld, i, j, "Wasser");
   
        // Gegnerfeld
        
        for (int i=0; i<10; i++)
        	for (int j=0; j<10; j++)
        		{neu.setzeFeldteil(bImgArrGegnerfeld, i, j, "Wasser_verdeckt");}
        
       
        MouseListener ml = new MouseListener() {
   ...
    		
    		@Override
    		public void mouseClicked(MouseEvent e) {
    			
    				int i = (e.getX() - 30)/32;
    				int j = (e.getY() - 30)/32;
    			
    			// Wo wurde geklickt?
    				if ((i==10) || (j==10) || (i>20) || (e.getX()<30) || (e.getY()<30))
    					System.out.println("Außerhalb des Spielfeldes!"); 
    				else 
    				{
    					if (i>10)
    					{	i = i-11;
    						System.out.println("Gegnerfeld: i = " + Integer.toString(i) + ", j = " + Integer.toString(j));
    						SetzeFeld neuesFeldteil = new SetzeFeld();
    						try {
    							if /*RADIOBUTTON1 GEWÄHLT*/ 
    							   System.out.println("Button1 gewählt");
    						
    						} catch (IOException e1) {
    							// TODO Auto-generated catch block
    							e1.printStackTrace(); }
    					}
    					else ...
    					}
    				}
    			}
    	};
    	
    	this.addMouseListener(ml);
       repaint();
       
    }

 // Methode paintComponent ueberschreiben:
    
    
	@Override
	protected void paintComponent (final Graphics g)
	{
	// Die Oberklasse soll zeichnen
	super.paintComponent(g);
	
	// Spielfeld zeichnen  
	
	g.drawImage(bImgHintergrund, 30, 30, this);
		
	for (int i=0; i<10; i++)
		for (int j=0; j<10; j++)
			{g.drawImage(bImgArrMeinFeld[i][j], (30+i*32), (30+j*32), this);}
	for (int i=0; i<10; i++)
		for (int j=0; j<10; j++)
			{g.drawImage(bImgArrGegnerfeld[i][j], (380+i*32), (30+j*32), this);}
	}
	
}
```


----------



## tiimo (3. Mrz 2011)

Hier die Klasse 2 (Panel in dem die RadioButtons sind)


```
package spielfenster;

import ...

public class FensterErstellung {

	private JRadioButton schiffart5;
	private JRadioButton schiffart4;
	private JRadioButton schiffart3;
	private JRadioButton schiffart2;
	
	private JRadioButton schiffausrichtunghor;
	private JRadioButton schiffausrichtungver;
	
	public String schiffAusrichtung;
	public int schiffGroesse;
	
	public void erstelleFenster () throws IOException {
		// TODO Auto-generated method stub
		
		this.schiffAusrichtung = "";
		this.schiffGroesse = 0;
		
		Fenster spielfenster = new Fenster(960, 410);
		
		// 2 Teilbereiche des Fensters
		JPanel panelSpielfeld = new JPanel();
		panelSpielfeld.setLayout(new GridLayout(1,0));
	
		JPanel panelSchiffwahl = new JPanel();
		panelSchiffwahl.setLayout(new GridLayout (15,1));
		
		// Größe der beiden Bereiche
		panelSpielfeld.setPreferredSize(new Dimension (730, 0));
		panelSchiffwahl.setPreferredSize(new Dimension (200,0));
		
		// Spielfeld zum ersten Bereich zeichnen
		
		panelSpielfeld.add(new ZeichneSpielfenster(668, 318));
		
		panelSchiffwahl.add(new JLabel (""));
		panelSchiffwahl.add(new JLabel (""));
		panelSchiffwahl.add(new JLabel ("Schiffart: "));
		
		this.schiffart5 = new JRadioButton("1x Schlachtschiff (5er)", false);
			getSchiffart5().setActionCommand("5");
		this.schiffart4 = new JRadioButton("1x Kreuzer (4er)", false);
			getSchiffart4().setActionCommand("4");
		this.schiffart3 = new JRadioButton("2x Fregatte (3er)", false);
			getSchiffart3().setActionCommand("3");
		this.schiffart2 = new JRadioButton("1x Minensucher (2er)", false);
			getSchiffart2().setActionCommand("2");
		
		final ButtonGroup schiffartgr = new ButtonGroup();
		schiffartgr.add(schiffart5);
		schiffartgr.add(schiffart4);
		schiffartgr.add(schiffart3);
		schiffartgr.add(schiffart2);
		panelSchiffwahl.add(schiffart5);
		panelSchiffwahl.add(schiffart4);
		panelSchiffwahl.add(schiffart3);
		panelSchiffwahl.add(schiffart2);
		
		ActionListener al = new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (e.getActionCommand().compareTo("horizontal") == 0)
				{
					setSchiffAusrichtung("hor");
				}
				else
					if (e.getActionCommand().compareTo("vertikal") == 0)
					{
						setSchiffAusrichtung("ver");
					}
				
				if (e.getActionCommand().compareTo("5") == 0)
				{
					setSchiffGroesse(5);
				}
				else
					if (e.getActionCommand().compareTo("4") == 0)
					{
						setSchiffGroesse(4);
					}
					else
						if (e.getActionCommand().compareTo("3") == 0)
						{
							setSchiffGroesse(3);
						}
						else
							if (e.getActionCommand().compareTo("2") == 0)
							{
								setSchiffGroesse(2);
							}
				System.out.println("Ausrichtung: " + getSchiffAusrichtung());
				System.out.println("Groesse: " + getSchiffGroesse());
			}
		};
		 
		getSchiffart5().addActionListener(al);
		getSchiffart4().addActionListener(al);
		getSchiffart3().addActionListener(al);
		getSchiffart2().addActionListener(al);



		panelSchiffwahl.add(new JLabel (""));
		panelSchiffwahl.add(new JLabel ("Schiffausrichtung: "));

		this.schiffausrichtunghor = new JRadioButton("horizontal", false);
			getSchiffausrichtunghor().setActionCommand("horizontal");
		this.schiffausrichtungver = new JRadioButton("vertikal", false);
			getSchiffausrichtungver().setActionCommand("vertikal");
		
		ButtonGroup ausrichtunggr = new ButtonGroup();
		ausrichtunggr.add(schiffausrichtunghor);
		ausrichtunggr.add(schiffausrichtungver);
		panelSchiffwahl.add(schiffausrichtunghor);
		panelSchiffwahl.add(schiffausrichtungver);
		
		getSchiffausrichtunghor().addActionListener(al);
		getSchiffausrichtungver().addActionListener(al);
		 
		// Anordnung der beiden Teilbereiche
		spielfenster.add(panelSpielfeld, BorderLayout.WEST);
		JSeparator trennung = new JSeparator(SwingConstants.VERTICAL);
		spielfenster.add(trennung, BorderLayout.CENTER);
		spielfenster.add(panelSchiffwahl, BorderLayout.EAST);
		
		// Fenster sichtbar machen
		spielfenster.setVisible(true);
	}
	
	
	// Zugriff auf gewählte RadioButtons außerhalb der Klasse
	public JRadioButton getSchiffart5(){
		return this.schiffart5;
	}
	public JRadioButton getSchiffart4(){
		return this.schiffart4;
	}
	public JRadioButton getSchiffart3(){
		return this.schiffart3;
	}
	public JRadioButton getSchiffart2(){
		return this.schiffart2;
	}
	public JRadioButton getSchiffausrichtunghor(){
		return this.schiffausrichtunghor;
	}
	public JRadioButton getSchiffausrichtungver(){
		return this.schiffausrichtungver;
	}
	
	public void setSchiffAusrichtung(String s) {
		this.schiffAusrichtung = s;
	}
	public String getSchiffAusrichtung() {
		return this.schiffAusrichtung;
	}
	public void setSchiffGroesse(int g) {
		this.schiffGroesse = g;
	}
	public int getSchiffGroesse() {
		return this.schiffGroesse;
	}
}
```


----------



## xehpuk (3. Mrz 2011)

Du könntest den MouseListener in [c]erstelleFenster()[/c] erstellen und dem [c]ZeichneSpielfenster[/c] hinzufügen. Dort hättest du dann Zugang zu den anderen Panels.


----------



## tiimo (3. Mrz 2011)

dann habe ich aber wiederum das Problem, dass ich nicht in dem anderen Panel meine Bildchen ändern kann (weil ich die eben in ZeichneSpielfenster drin hab)

die will ich ja, durch den Mausklick ändern...


----------



## tiimo (3. Mrz 2011)

und das repaint() findet eigtl. auch in "ZeichneSpielfenster" statt


----------



## tiimo (1. Apr 2011)

Hat sich erledigt.

Habe alles soweit hinbekommen


----------

