Mausklick auf Fenster in Verbindung zu RadioButtons

tiimo

Mitglied
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 :D
 

Simon_Flagg

Bekanntes Mitglied
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

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

tiimo

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

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

Java:
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

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

Java:
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

Top Contributor
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

Mitglied
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...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
TulPe Würfel per Mausklick rotieren Spiele- und Multimedia-Programmierung 10
E Spritebewegung rotiert zum Mausklick Spiele- und Multimedia-Programmierung 14
I Schuss mit Mausklick Spiele- und Multimedia-Programmierung 3
Developer_X Java3D- der Mausklick auf Nodes Spiele- und Multimedia-Programmierung 3
G Mausklick an vorgegebener Stelle durchführen Spiele- und Multimedia-Programmierung 3
T Auf Mausklick warten Spiele- und Multimedia-Programmierung 4
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
N Warum ist das Fenster nicht schwarz? Spiele- und Multimedia-Programmierung 26
S Draw Package - mehere Fenster will aber nur eins Spiele- und Multimedia-Programmierung 1
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
E JOGL nur weißes Fenster Spiele- und Multimedia-Programmierung 2
J LWJGL - schwarzes Fenster Spiele- und Multimedia-Programmierung 5
H Radius in neuem Fenster eingeben Spiele- und Multimedia-Programmierung 9
T 2 Fenster bei JPCT Spiele- und Multimedia-Programmierung 5
Kr0e JOGL & Anpassung ins Fenster Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben