Erste Schritte Vererbung klappt nicht

Hallo,

ich möchte gerne, dass meine Unterklasse Button an die Superklasse Fenster vererbt wird, damit ich in der Klasse Fenster diese Button dem JFrame "Frame" hinzufügen kann.
Der super- Befehl steht in meinem Konstruktor Fenster ganz oben, aber der Fehler, dass der Super- Befehl als erstes aufgerufen werden muss, bleibt.

Wenn ich den super- Befehl aber nach ganz oben schreibe, möchte Eclipse unnötige Klammern gesetzt haben..., dieser Ansatz scheint daher der falsche zu sein.

Hier nun also mein Code:
Unterklasse:

Java:
import javax.swing.JButton;
import javax.swing.JFrame;

public class Fenster extends Button{
	// Unterklasse (erweitert Superklasse)
	JFrame Frame;
	
	
public void Fenster(){
		super();
		Frame = new JFrame("Text");
        Frame.setSize(900,900);
        Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Frame.setLayout(new GridLayout(3,3));
        Frame.pack();
        Frame.setVisible(true);	
	}
}

Oberklasse
Java:
import java.awt.Color;
import java.awt.Frame;

import javax.swing.JButton;


public class Button {
	// Oberklasse
JButton cmdButton;

public Button() {
	cmdButton = new JButton();
	cmdButton.setSize(300,300);
	cmdButton.setBackground(Color.red);
	}
}

Meine Java- Kenntnisse sind noch sehr übersichtlich. Vielen Dank schon einmal für Eure Hilfe.

Blackpanther23
 
sondern? Könntest Du mir das ein bisschen genauer erklären. Ich bin noch nicht lange mit Java vertraut... Leider. Wenn ich hier
Java:
public void Fenster(){
, void entferne, dann hätte ich doch einen Konstruktor, oder? Das löst das Problem aber leider nicht.

Die Fehlermeldung lautet:
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Syntax error on token "super", Identifier expected

Kannst Du mir da nochmal helfen? Danke schon mal vorab.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Fenster extends Button ... ernsthaft ?

Wer zeigt euch eigentlich so eine grütze ?

Ein Fenster ist weder eine Erweiterung noch eine Spezialisierung eines Buttons, ich glaube da solltest du nochmal den tieferen Sinn von Vererbung nachlesen.

ein Fenster HAT ggf. einen Button als Attribut / Eigenschaft, und selbst da hat eher der low level Container sprich JComponent / JPanel den button als Attribut, und nicht der Top-Level Container.

;)

[EDIT]man unterscheidet hier zwischen has-a und is-a Beziehungen[/EDIT]
 
Zuletzt bearbeitet:
Du würdest es anders machen?

[EDIT]

abgesehen davon macht es Sinn das JFrame ( also den Container ) nur in der main-Methode zu erzeugen , und einfach den zu zeichnenden Inhalt ( content ) in Form eines JPanel / JComponents oder einer Spezialisierung dieser zu übergeben.
[/EDIT]

Komme ich damit dem ganzen näher?
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Das JFrame ist der Top Level Container , welcher alle Low-Level Komponenten enthalten sollte, dieser werden in GUI Programmierung gewöhnlich geschachtelt, sprich

Code:
-Toplevel Container
      -Lowlevel Container
           - Components


Hier mal als innere Klasse da ich zeit sparen wollte
Java:
public class Foo {
	
	// main methode , hier wird er Toplevel Container instanziert
	
	public static void main(String[] args) {
	    JFrame f = new JFrame("Top Level Container");
	    
	    //Instanziieren und hinzufügen des Lowlevel Containers zum Toplevel Container
	    f.setContentPane(new Foo().new MyBluePanel());  
	    
	    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    f.pack();
	    f.setLocationRelativeTo(null);
	    f.setVisible(true);

    }
	
	// Innere klasse hier nur zwecks Beispiel ( Low-Level Container )
	
	class MyBluePanel extends JPanel{
        private static final long serialVersionUID = 1L;
        
        //Attribut
        JButton btn;
        
        //Konstruktor
        public MyBluePanel() {
	        setPreferredSize(new Dimension(200,80));
	        setBackground(Color.BLUE);
	        
	        //Button instanziieren
	        btn = new JButton("Mein Button");
	        //Button dem Lowlevel Container hinzufügen
	        add(btn);
        }
		
	}

}

Grundsätzlich sollte man bestehende Klassen nur erweitern / Spezialisieren , wenn man ihnen auch weitere Funktionalitäten hinzufügt oder weitere Eigenschaften oder Besonderheiten herauskristallisieren möchte.


Hier nochmal eine variante die vielleicht für dich einfacher nachzuvollziehen ist , in getrennten Klassen

Klasse Fenster.java

Java:
import javax.swing.JFrame;

public class Fenster {
	
	public static void main(String[] args) {
	    JFrame f = new JFrame("Mein Fenster");
	    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    f.setContentPane(new ButtonPanel());
	    f.pack();
	    f.setLocationRelativeTo(null);
	    f.setVisible(true);
    }

}

und die Klasse ButtonPanel welche in diesem Fall eine Spezialisierung der Klasse Jpanel ist

Java:
import java.awt.Dimension;

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

public class ButtonPanel extends JPanel {
    private static final long serialVersionUID = 1L;
    
	JButton btn;
	
	public ButtonPanel() {
		setPreferredSize(new Dimension(200, 80));

		btn = new JButton("Meine Komponente");
		
		add(btn);
    }

}
 
Zuletzt bearbeitet:
Vielen Dank Dir. Ich gucke mir das morgen mal in Ruhe an, damit ich auch was lerne. Ich weiß, dass meine Fehler in Deinen Augen offensichtlich sind. Morgen werde ich noch mal ein bisschen was googlen, dann gucken wir weiter. Danke nochmals.
 

kaoZ

Top Contributor
Siehe mein Edit,

Jede klasse sowie auch methode , sollte nach Konvention immer nur für eine Aufgabe zuständig sein ,

sprich sollte die Klasse Fenster auch nur das Fenster erzeugen und ihr inhalt hinzufügen

was genau der Inhalt ist ist der Klasse egal, dies wird dann in einer anderen Klasse Festgelegt :)
 
Guten abend, hab mir jetzt nochmal einiges durchgelesen und bin auch weiter gekommen.
Das Problem was ich jetzt habe ist, dass ich in der Klasse Buttonpanel Buttons erstelle. Dann habe ich für jeden dieser Buttons ActionListener erstellt, die auch funktionieren. Jetzt möchte ich mit dem ActionListener beispielweise den Buttontext ändern, aber die Klasse des ActionListeners kennt die Objekte der Klasse Buttonpanel ja nicht.
Nach einer Googlerecherche kam ich auf get- Methoden, aber funktionieren die auch mit Objekten?
Sprich: Wie kann ich die Objekte einer Klasse A einer Klasse B(dem ActionListener) zugänglich machen?

Vielen, vielen Dank nochmal an kaoZ für die Idee mit dem JPanel. Sie war wirklich Gold wert.
 

kaoZ

Top Contributor
Ja getter funktionieren auch bei Objekten sowie auch bei Primitiven Datentypen.

Es gibt wie immer mehrere wege, je nachdem wie du deine Klasse designst, entweder du übergibst den Klassen als Attribut eine Referenz auf die Zielklasse, bietest öffentliche getter an, nutzt eine Schnittstelle usw. usw.

Je nachdem was genau dein Ziel ist.

Hier mal ein ganz schlichtes , einfaches Beispiel , mit mehreren Buttons innerhalb einer klasse :

Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Foo extends JPanel implements ActionListener {

    JButton[] btns;
    String[] btnsText = {"Button 1","Button 2"};

    public Foo() {
        
        //Eigenschaften des Panels
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        setPreferredSize(new Dimension(150,100));
        
        //länge des arrays festlegen
        btns = new JButton[2];
        
        /*buttons erzeugen, beschriften, 
         *listener hinzufügen, dem panel hinzufügen
         */
        for (int i = 0; i < btns.length; i++) {
            btns[i] = new JButton(btnsText[i]);
            add(btns[i]);
            btns[i].addActionListener(this);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
       if (e.getSource() == btns[0]) {
           btns[1].setText("Whoot !?");
       }
       if (e.getSource() == btns[1]) {
           btns[0].setText("Oweiaaa !");
       }
    }
  
    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        f.add(new Foo());
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

Java arbeitet pass by value, das zählt für primitive Werte wie auch objekte, und nein an dieser Stelle wird bitte nicht wieder ein "Aber es ist doch pass by Reference" Thread draus gemacht.

Wenn du bei primitiven Datentypen eine Variable an eine Methode übergibst, wird intern mit einer Kopie des Wertes dieser gearbeitet.

Übergibst du einer Methode eine Referenz auf ein Objekt, arbeitet die Methode intern mit einer Kopie der Referenz, nicht einer Kopie des Objektes, es existieren also 2 Referenzen, die Originale und die innerhalb der Methode, welche aber beide auf das gleiche Objekt auf dem Heap zeigen, sprich beide auf den gleichen Speicherbereich "zeigen".

du kannst also z.B auch einen JButton returnen.

Java:
Jbutton btn = new JButton("Mein Button");

public JButton getButton()      {return this.btn;}
 
Zuletzt bearbeitet:
Hallo,

nachdem ich nun ein paar Tage rumprobiert habe(leider erfolglos). Die Beispiele von kaoZ habe ich versucht zu übertragen aber ich erhalte den folgenden Fehler:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method meinActionListener1(ButtonPanel) is undefined for the type Object

at ButtonPanel.<init>(ButtonPanel.java:32)
at Hauptprogramm.main(Hauptprogramm.java:10)

Ich möchte ein TicTacToe- Spiel erstellen. Ich poste jetzt mal alles wichtige:

Hauptprogramm:
Java:
import java.awt.GridLayout;
import javax.swing.JFrame;

public class Hauptprogramm{
	public static void main(String[] args){
	
		JFrame meinFrame = new JFrame("Fenstertext");
		meinFrame.setSize(900,900);
		meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
		meinFrame.setContentPane(new ButtonPanel());
		meinFrame.setLayout(new GridLayout(3,3));
		meinFrame.setVisible(true);
		}
    }

Klasse Buttonpanel:
Java:
import javax.swing.JButton;
import javax.swing.JPanel;

public class ButtonPanel extends JPanel{ //Unterklasse

	private static final long serialVersionUID = 4516855840251586257L;
	JButton button1, button2, button3, button4, button5, button6, button7, button8, button9;
	boolean spieler1 = false;
	boolean angeklickt = false;
	JButton[] Buttons;
	String[] Buttontexte;
	
	
	public ButtonPanel(){
		
		
	/*	button1 = new JButton("1");
		button2 = new JButton("2");
		button3 = new JButton("3");
		button4 = new JButton("4");
		button5 = new JButton("5");
		button6 = new JButton("6");
		button7 = new JButton("7");
		button8 = new JButton("8");
		button9 = new JButton("9"); */
		
		Buttons = new JButton[8];
		//Buttontexte = new JButton[2][2];
		for (int i=0; i<Buttons.length;i++) {
				Buttons[i] = new JButton(Buttontexte[i]);
				add(Buttons[i]);
				((Object) Buttons[i]).meinActionListener1(this);
				
			}
		
	/* 	add(button1);
		add(button2);
		add(button3);
		add(button4);
		add(button5);
		add(button6);
		add(button7);
		add(button8);
		add(button9); */
		
		EigenerActionListener1 meinActionListener1 = new EigenerActionListener1();
		EigenerActionListener2 meinActionListener2 = new EigenerActionListener2();
		EigenerActionListener3 meinActionListener3 = new EigenerActionListener3();
		EigenerActionListener4 meinActionListener4 = new EigenerActionListener4();
		EigenerActionListener5 meinActionListener5 = new EigenerActionListener5();
		EigenerActionListener6 meinActionListener6 = new EigenerActionListener6();
		EigenerActionListener7 meinActionListener7 = new EigenerActionListener7();
		EigenerActionListener8 meinActionListener8 = new EigenerActionListener8();
		EigenerActionListener9 meinActionListener9 = new EigenerActionListener9();
		
		button1.addActionListener(meinActionListener1);
		button2.addActionListener(meinActionListener2);
		button3.addActionListener(meinActionListener3);
		button4.addActionListener(meinActionListener4);
		button5.addActionListener(meinActionListener5);
		button6.addActionListener(meinActionListener6);
		button7.addActionListener(meinActionListener7);
		button8.addActionListener(meinActionListener8);
		button9.addActionListener(meinActionListener9);
		}
	}

Und hier noch exemplarisch noch die Klasse Eigener ActionListener1, es gibt insgesamt 9 davon.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EigenerActionListener1 implements ActionListener {//Oberklasse
		public void actionPerformed(ActionEvent arg0) {
			
			System.out.println("test1");
				}	
			}

Meine Frage: Die Textausgaben gehen. Aber wie übertrage ich das Beispiel von kaoz auf mein Programm? Die Klassen können so ja noch nicht von den ActionListener gekannt werden.

Vielen Dank nochmal,
Blackpanther23
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Warum muss man eigentlich immer mit , für einen Anfänger doch relativ schweren Aufgabe beginnen ?

Mir scheint das hier noch Grundlagen , grade im Bezug auf Getter/Setter, Instanzvariablen fehlen,

GUI Programmierung von hand kann einen in den Wahnsinn treiben, grade wenn man sich nicht mit dem Verhalten der einzelnen Container und den Layoutmanagern auskennt.


Du musst nicht für jeden Button einen eigenen ActionListener erstellen.....

hier nochmal ein schnelles Beispiel :

GUI.java
Java:
import javax.swing.JFrame;

public class GUI {
	
	public static void main(String[] args) {
		
		JFrame f = new JFrame("ColorChanger");
		f.setContentPane(new ButtonPane());
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(2);
		f.setVisible(true);
	}

}


ButtonPane.java
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

@SuppressWarnings("serial")
public class ButtonPane extends JPanel implements ActionListener{
	
	//deklarieren
	private String[] label;
	private JButton[] btn;
	
	public ButtonPane() {

		setPreferredSize(new Dimension(250,250));
		
		
		//initialisieren
		label = new String[]{"button 1","button 2","button 3","button 4"};  
		btn = new JButton[label.length];
		
		for (int i = 0; i < label.length; i++) {
	/*1*/	btn[i] = new JButton(label[i]);
	/*2*/	btn[i].setPreferredSize(new Dimension(120,25));
	/*3*/	btn[i].addActionListener(this);		
	/*4*/	add(btn[i]);  
		}
	}
	
	// 1 - button array mit beschrifteten Buttons befüllen
	// 2 - bevorzugte Größe setzen
	// 3 - listener hinzufügen
	// 4 - button dem Pane hinzufügen
	

	@Override
	public void actionPerformed(ActionEvent e) {
		
		switch(e.getActionCommand()){
		case "button 1": 
			this.setBackground(Color.RED);
			break;
		case "button 2": 
			this.setBackground(Color.GREEN);
			break;
		case "button 3": 
			this.setBackground(Color.BLUE);
			break;
		case "button 4":
			this.setBackground(Color.CYAN);
			break;
		}
	}

}
 
Zuletzt bearbeitet:
Hallo,

vielen Dank kaoZ, die Buttonerstellung hat geklappt.:toll::applaus: Du hast recht, es fehlen mir einige Grundlagen. Ich hätte wahrscheinlich auch mit etwas leichterem beginnen sollen, aber ich habe jetzt schon so viel Zeit investiert, dass ich auch gerne ein Ergebnis hätte;)

Aber wenn ich versuche, den Button, nachdem er angeklickt wurde, nicht- anklickbar zu machen, erhalte ich Unknown Source Fehler:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ButtonPanel.actionPerformed(ButtonPanel.java:36)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Das ist mein Code:
Java:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class ButtonPanel extends JPanel implements ActionListener{

	private static final long serialVersionUID = 4516855840251586257L;
	JButton button1, button2, button3, button4, button5, button6, button7, button8, button9;
	int spieler = 1;
	private String[] Buttontexte;
    private JButton[] Buttons;
    
	
	public ButtonPanel(){
		Buttontexte = new String[]{"button1","button2","button3","button4","button5","button6","button7","button8","button9"};  
        Buttons = new JButton[Buttontexte.length];
		
        for (int i=0; i<Buttontexte.length;i++) {
        	Buttons[i] = new JButton(Buttontexte[i]);
        	Buttons[i].addActionListener(this);
        	add(Buttons[i]);
        }
   
		EigenerActionListener meinActionListener = new EigenerActionListener();	
		}


	@Override
	public void actionPerformed(ActionEvent e) {
	
		 switch(e.getActionCommand()){
	        case "button1":
	        	button1.setEnabled(false);
	            break;
	        case "button2":
	        	button2.setEnabled(false);
	            break;
	        case "button3":
	        	button3.setEnabled(false);
	            break;
	        case "button4":
	        	button4.setEnabled(false);
	            break;
	        case "button5":
	        	button5.setEnabled(false);
	        	break;
	        case "button6":
	        	button6.setEnabled(false);
	        	break;
	        case "button7":
	        	button7.setEnabled(false);
	        	break;
	        case "button8":
	        	button8.setEnabled(false);
	        	break;
	        case "button9":
	        	button9.setEnabled(false);
	        	break;
		}
	}
}

Mein Ansatz war, mit getSource() zu arbeiten, aber weder button1.getSource() noch ButtonPanel.getSource() lösten das Problem. Ist es nicht so, dass der ActionListener nicht zuordnen kann, wo button1 herkommt?

Danke schön.
 

VfL_Freak

Top Contributor
Aber wenn ich versuche, den Button, nachdem er angeklickt wurde, nicht- anklickbar zu machen, erhalte ich Unknown Source Fehler:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ButtonPanel.actionPerformed(ButtonPanel.java:36)
nein, Du erhälst eine "NullPointerException"!
An der angegebenen Stelle ist also win Objekt nicht initialisiert/gefüllt etc.

Gruß
Klaus
 

Harry Kane

Top Contributor
Mein Ansatz war, mit getSource() zu arbeiten, aber weder button1.getSource() noch ButtonPanel.getSource() lösten das Problem. Ist es nicht so, dass der ActionListener nicht zuordnen kann, wo button1 herkommt?
button1 ist eine Instanz von JButton (bzw. eigentlich nicht, weil sie null ist, s. unten), ButtonPanel ist eine Klasse. Mal ganz abgesehen davon, daß du mit dem o. g. Aufruf einmal eine Instanzmethode und einmal eine Klassenmethode versuchst aufzurufen: keine der beiden Klassen hat eine getSource() Methode.
Die Fehlermeldung kommt daher, weil keiner der 9 JButtons button1 bis button9 initialisiert wurde. Sie sind lediglich deklariert.
 
wenn ich das hier so mache:

Java:
switch(e.getActionCommand()){
	        case "button1":
	        	this.setEnabled(false);
	            break;

dann gibts zwar keinen error, aber der Button ist auch nicht ausgegraut. Warum nur? :bahnhof:
 

Harry Kane

Top Contributor
wenn ich das hier so mache:

Java:
switch(e.getActionCommand()){
	        case "button1":
	        	this.setEnabled(false);
	            break;

dann gibts zwar keinen error, aber der Button ist auch nicht ausgegraut. Warum nur? :bahnhof:
Weil "this" die aktuelle Instanz von ButtonPane bzw. JPanel ist. Die hat nix mit irgendwelchen buttons zu tun!
Edit: Ich habe den Eindruck, als würdest du auf die Existenz von irgendwelchen Automatismen hoffen bzw. darauf, daß Java richtig errät was du eigentlich willst. So nach dem Motto "ich habe doch im case "button1" geschrieben, also muss Java doch wissen, daß ich button1 disablen will".
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Das verwenden von ActionCommands war auch nur eines der Lösungsbeispiele, du kannst auch mit getSource arbeiten und dann die Quelle des ActionEvents abfragen , allerdings liefert 'this' wie hier bereits erwähnt immer den aktuellen Kontext, und nicht die Instanz des jeweiligen buttons, außer natürlich du befindest dich in einer Klasse welche du z.B von JButton ableitest.

wenn du das Event per getSource() abfangen möchtest, musst du , abgesehen davon das du die buttons auch intitialisieren musst folgendes machen :

(insofern du die Buttons in einem Array hälst , über deren index in diesem

Java:
@Override
public void actionPerformed(ActionEvent event){

  if(event.getSource() == buttons[0]){
     //do some stuff
  }
  if(event.getSource() == buttons[1]{
    // do another stuff
 }
  //...usw.
}

mal davon abgesehen funktioniert der Ansatz über ActionCommands auch nur wenn du die jeweiligen ActionCommands der jeweiligen Buttons verwendest, sprich übergibst du dem Konstruktor ein Stirng literal , wird dieses automatisch auch als dessen ActionCommand gesetzt,
machst du das nicht kannst du es alternativ auch über setActionCommand(String s) setzen.
 
Zuletzt bearbeitet:
Ich glaube, ich steh echt auf dem Schlauch.
Java:
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == Buttons[0]) {
			button1.setEnabled(false);
		}
		if(e.getSource() == Buttons[1]) {
		button2.setEnabled(false);	
		
		}
	}
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ButtonPanel.actionPerformed(ButtonPanel.java:36)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Habe ich Dein Beispiel falsch verstanden oder falsch umgesetzt?
 

kaoZ

Top Contributor
Code:
 at ButtonPanel.actionPerformed(ButtonPanel.java:36)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

Hier ist der Grund, mal agesehen davon schreibt man variablen Namen sowie auch Referenzen lowerCamelCase

sprich
Java:
buttons[0]

Hier nochmal ein Beispiel mit getSource() und den deaktivieren der Buttons

ButtonPane

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

@SuppressWarnings("serial")
public class ButtonPane extends JPanel implements ActionListener{
	
	//deklarieren
	private String[] label;
	private JButton[] btn;
	
	public ButtonPane() {

		setPreferredSize(new Dimension(250,250));
		
		
		//initialisieren
		label = new String[]{"button 1","button 2","button 3","button 4"};  
		btn = new JButton[label.length];
		
		for (int i = 0; i < label.length; i++) {
	/*1*/	btn[i] = new JButton(label[i]);
	/*2*/	btn[i].setPreferredSize(new Dimension(120,25));
	/*3*/	btn[i].addActionListener(this);		
	/*4*/	add(btn[i]);  
		}
	}
	
	// 1 - button array mit beschrifteten Buttons befüllen
	// 2 - bevorzugte Größe setzen
	// 3 - listener hinzufügen
	// 4 - button dem Pane hinzufügen
	

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == btn[0]) {
			setBackground(Color.BLUE);
			btn[0].setEnabled(false);
		}
		if (e.getSource() == btn[1]) {
			setBackground(Color.CYAN);
			btn[0].setEnabled(true);
		}
	}

}

Gui

Java:
import javax.swing.JFrame;

public class GUI {
	
	public static void main(String[] args) {
		
		JFrame f = new JFrame("ColorChanger");
		f.setContentPane(new ButtonPane());
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(2);
		f.setVisible(true);
	}

}
 
Zuletzt bearbeitet:
Moin,

was steht denn in der Zeile "ButtonPanel.java:36" ???:L
Sollen wir das raten ???:L

Gruß
Klaus

Code:
button1.setEnabled(false);

Kann gut sein, dass die Zeilenangabe nicht stimmt, weil ich (um es Euch etwas leichter zumachen) den auskommentierten Zeilen entfernt habe.

Die Groß- und Kleinschreibung werde ich ändern.
____________
Ich weiß, dass ich noch in den absoluten Startlöchern stecke, was Java angeht, und das dieser Zustand mit viel Unkenntnis meinerseits verbunden ist. Das macht das Helfen für Euch sicher nicht angenehmer, ich bin gerne bereit, auch etwas nachzulesen, vielleicht in einem openbook? Wenn ihr da einen Tipp habt, nichts wie her damit. Ich habe bisher das hier gefunden, und meine es einigermaßen verstanden zu haben:JAVA: 6.1.5 Instanzen

[EDIT]
Danke, jetzt klappts! Da hab ich mich aber auch blöd angestellt!!!
[/EDIT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung klappt nicht richtig? Java Basics - Anfänger-Themen 6
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben