JButton aus JPanel Class nicht erreichbar

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich hab ein kleines Problem. Wenn ich normalerweise einen Button für einen ActionListener mache schreibe ich ja

Code:
JButton b1 = new JButton();

b1.addActionListener(new ActionListener() 
{
       public void actionPerformed(ActionEvent ae)   
      {
               // Methode die etwas machen soll
      }
});

Ich hatte erst die Ausgangssituation das ich eine klasse hatte (extends JPanel) mit der Eingeschaft ein Button. Das sah folgendermaßen aus:

Code:
public class Spiel_brett_2 extends JFrame{
	
	Schwarzer_Panel A1 = new Schwarzer_Panel();

	public Spiel_brett_2()
	{
		Container cp = getContentPane();
		cp.setLayout(new GridLayout(2,2));

		cp.add(A1); 	
		
		A1.b.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent ae)
			{
                               // Methode die etwas tut;
			}
		});	
		
		
		this.setSize(172,168);
		this.setTitle("Schach 5000");
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}	
}

class Schwarzer_Panel extends JPanel 
{
	JButton b = new JButton();
	public Schwarzer_Panel()
	{
		setLayout(null);
		b.setBounds(0,0, 86, 84);
		b.setBackground(Color.black);
		add(b);
	}
}

In diesem Programmausschnitt konnte ich mich mit
A1.b
direkt auf den Button beziehen.

Nun habe ich die objekte von der klasse in einer Schleife erzeugt. Das Hinzuadden der JPanel container funktioniert ohne weiteres. Aber ich kann nicht mehr auf den Button in der klasse zugreifen. :/ Hier der neue code:

Code:
public class Schach_3 extends JFrame{
	
	public Schach_3()
	{
		
		Container cp = getContentPane();
		cp.setLayout(new GridLayout(8,8));		
		int farbwechsel_zaehler = 1;
		
		JPanel arr [] = new JPanel[64];
		
		for (int i = 0; i < arr.length; i++)
		{
			
			if(i % 8 == 0 )
			{
				farbwechsel_zaehler++;
			}
				
			if(farbwechsel_zaehler % 2 == 0)
			{
				if(i % 2 == 0)
				{
					arr[i] = new Schwarzer_Panel();
				}
				
				else
				{
					arr[i] = new Weisser_Panel();
				}
			}
			
			else
			{
				if(i % 2 != 0)
				{
					arr[i] = new Schwarzer_Panel();
				}
				
				else
				{
					arr[i] = new Weisser_Panel();
				}
			}
		}
		
		arr[1].b.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent ae)
			{
				
			}
		});	
		
		for (int i = 0; i < arr.length; i++)
		{
			cp.add(arr[i]);
		}
			
		this.setSize(680,700);
		this.setTitle("Schach 5000");
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}	


	public static void main(String[] args) {
		Schach_3 s3 = new Schach_3();
	}
}


class Weisser_Panel extends JPanel 
{	
	JButton b = new JButton();
	public Weisser_Panel()
	{
		setLayout(null);
		b.setBounds(0,0, 86, 84);
		b.setBackground(Color.WHITE);
		add(b);
	}
}

class Schwarzer_Panel extends JPanel 
{
	JButton b = new JButton();
	public Schwarzer_Panel()
	{
		setLayout(null);
		b.setBounds(0,0, 86, 84);
		b.setBackground(Color.black);
		add(b);
	}
}

Ich wollte über
arr[1].b
direkt auf den Button zugreifen, doch er kennt die eigenschaft gar nicht mehr :/

also wollte
arr[0].b.addActionListener
arr[1].b.addActionListener
arr[2].b.addActionListener
schreiben

hat einer eine antwort wieso das nicht geht? Bzw. was ich falsch mache?

Wäre sehr nett :)

Liebe grüße[/code][/quote]
 
S

SlaterB

Gast
> JPanel arr [] = new JPanel[64];

->

Weisser_Panel arr [] = new Weisser_Panel[64];

wenn du zwei derartige Panel-Klassen hast, die du im Array mischst, dann wirds schlecht,

entweder eine gemeinsame Klasse für die beiden (Farbe im Konstruktor übergeben),
oder eine gemeinsame Basisklasse

oder ein Interface, dann kannst du aber nicht mehr auf Klassenattribute zugreifen, sondern nur noch Methoden wie getButton(),
was aber generell dringendst zu empfehlen ist!
 

ThomasGo

Mitglied
JPanel hat ja auch keine Button-Eigenschaft, die haben nur schwarzer oder weißer panel.

Das Array ist aber als JPanel[] deklariert, was heißt du kommst nur an das ran, was JPanel auch kennt.

Mach doch einfach aus Schwarzer_Panel und Weißer_Panel eine Klasse Game_Panel (oder so ähnlich) mit den Eigenschaften Button und Farbe. Dann deklarier das Array als Game_Panel[] und voila ... ;)
 
G

Gast

Gast
Eine klasse zu machen ist ja ganz gut, löst das problem sicherlich auch. Aber ich will pro erzeugten Panel nur ein Button haben der den gesamten Panel einnimmt.

Und wenn ich zwei Buttons erstelle und hinzu adde passt das nicht ganz :/ da muss ich irgendwie noch eine entscheidung treffen. bzw. die farbe dann erst in der klasse schach_3 hinzufügen oder? :/
 

ThomasGo

Mitglied
Du kannst ja den Konstruktor nutzen, z.B.
Code:
Game_Panel(Color color)
{
  b = new JButton(<text>);
  b.setBackground(color);
}

Natürlich musst du dann die Farbe im Schachbrett hinzufügen, aber damit könntest du auch die Farben mal ändern, statt die fix in einer Panelklasse zu haben.
 

ThomasGo

Mitglied
Ürbigens hast du ja schon eine Enscheidung mit deinem Farbwechselzähler. Also einfach statt Schwarzer_Panel() Game_Panel(Color.BLACK) schreiben.
 
G

Guest

Gast
Ich hab das Problem jetzt erstmal folgendermaßen gelöst

Code:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Schach_3 extends JFrame{
	
	public Schach_3()
	{
		
		Container cp = getContentPane();
		cp.setLayout(new GridLayout(8,8));		
		int farbwechsel_zaehler = 1;
		
		Schachfelder arr [] = new Schachfelder[64];
		
		for (int i = 0; i < arr.length; i++)
		{
			
			if(i % 8 == 0 )
			{
				farbwechsel_zaehler++;
			}
				
			if(farbwechsel_zaehler % 2 == 0)
			{
				if(i % 2 == 0)
				{
					arr[i] = new Schachfelder();
					arr[i].b.setBackground(Color.BLACK);
				}
				
				else
				{
					arr[i] = new Schachfelder();
					arr[i].b.setBackground(Color.WHITE);
				}
			}
			
			else
			{
				if(i % 2 != 0)
				{
					arr[i] = new Schachfelder();
					arr[i].b.setBackground(Color.BLACK);
				}
				
				else
				{
					arr[i] = new Schachfelder();
					arr[i].b.setBackground(Color.WHITE);
				}
			}
		}
		
		for (int i = 0; i < arr.length; i++)
		{
			cp.add(arr[i]);
		}
				
		arr[0].b.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent ae)
			{
				
			}
		});
		
			
		this.setSize(680,700);
		this.setTitle("Schach 5000");
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}	


	public static void main(String[] args) {
		Schach_3 s3 = new Schach_3();
	}
}


class Schachfelder extends JPanel 
{	
	JButton b = new JButton();
	
	public Schachfelder()
	{
		setLayout(null);
		b.setBounds(0,0, 86, 84);
		add(b);
	}
}
 
S

SlaterB

Gast
Klassen im Singular benennen, Schachfeld statt Schachfelder
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
H Fragen zu JPanel und JButton AWT, Swing, JavaFX & SWT 3
G JTextField mit JButton und ausklappendem JPanel AWT, Swing, JavaFX & SWT 8
K JButton auf JPanel in JTable (Darstellungs-/Event-Probleme) AWT, Swing, JavaFX & SWT 16
W Swing Problem ( JPanel & JButton ) AWT, Swing, JavaFX & SWT 6
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben