Zugriffsproblem - Funktion von Grafik trennen

F

Firephoenix

Gast
viel gesucht und in meinem Buch geblättert und ich komme nicht auf meinen Fehler ;(

Eine Java-Datei, 2 Klassen:

Fenster erzeugt ein einfaches Fenster mit 2 Buttons, Fenster_Aktionen soll nun die Funktionalität der Buttons steuern, dazu habe ich den auskommentierten Teil in die Klasse überschrieben und die Action listener der Buttons angepasst.
Das Problem ist jetzt (wie ich vermute): Die Klasse Fenster_Aktionen erlaubt den Zugriff auf Window.setBackground nicht... zumindest nicht über die Buttons.

Das Problem sind Zeile 69 und 75

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

public class Fenster
extends Frame
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fenster_Aktionen F_A = new Fenster_Aktionen();
		Fenster Window = new Fenster(F_A);
		
		Window.setVisible(true);
	}

	public Fenster(ActionListener F_A)
	{
		super("Aufzug");
		addWindowListener(new WindowClosingAdapter(true));
		setBackground(Color.ORANGE);
		setSize(500,600);
		setLayout(null);
			Button B0 =new Button("Erdgeschoss");
			B0.setBounds(50, 60, 100, 30);
			B0.addActionListener(F_A);
			add(B0);		
			
			Button B1 =new Button("Stockwerk 1");
			B1.setBounds(50, 120, 100, 30);
			B1.addActionListener(F_A);
			add(B1);

		
	}
	/*
	public void actionPerformed(ActionEvent event)
	{
		String cmd = event.getActionCommand();
		if (cmd.equals("Erdgeschoss"))
			setBackground(Color.BLACK);
			else
			{
				//nichts
			}
		if (cmd.equals("Stockwerk 1"))
			setBackground(Color.GREEN);
			else
			{
				//nichts
			}
	}
	*/
	
}

class Fenster_Aktionen
implements ActionListener
{
	public void actionPerformed(ActionEvent event)
	{
		String cmd = event.getActionCommand();
		if (cmd.equals("Erdgeschoss"))
			Window.setBackground(Color.BLACK);
			else
			{
				//nichts
			}
		if (cmd.equals("Stockwerk 1"))
			Window.setBackground(Color.GREEN);
			else
			{
				//nichts
			}
	}
}

Hättet ihr einen Vorschlag wie ich es schaffe Manipulationen im Fenster der 1. Klasse mit der 2. Klasse vorzunehmen, die die Events der Buttons aus Klasse 1 abfängt?
Bin seit über ner Stunde auf der Suche nach ner Lösung und komme nicht weiter, der Rest vom Programm steht schon (war ne alte eigene Übung), nur da ich gerade an Grafikübungen bin würde ich es gerne auf eine Oberfläche übertragen. Und ohne eine GUI die ich ordentlich aufbauen und manipulieren kann geht das leider nicht, dazu fehlt mir aber die Erfahrung.

Danke für Hilfe/Antworten

Lg,
Firephoenix
 

Marco13

Top Contributor
Code:
class Fenster_Aktionen 
{
    private Fenster fenster;

    public void setFenster(Fenster fenster)
    {
        this.fenster = fenster;
    }

    // In der actionPerformed einfach fenster.setBackground oder so...

}

// In der main:
Fenster_Aktionen F_A = new Fenster_Aktionen();
Fenster Window = new Fenster(F_A);
[b]F_A.setFenster(Window);[/b]



Naming conventions beachten: Klassennamen ohne Unterstrich (FensterAktionen), Variablennamen klein ('window', oder besser 'fenster' - denn es ist ja ein Fenster, und kein Window).
 
F

Firephoenix

Gast
Danke, funktioniert, war einfach zu doof das als Ding über eine set in die andere Klasse zu schieben :D

das mit den Namensregeln habe ich auch soweit überarbeitet

fertiger Code:

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

public class Fenster
extends Frame
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FensterAktionen fa = new FensterAktionen();
		Fenster window = new Fenster(fa);
		fa.setFenster(window);
		
		window.setVisible(true);
	}

	public Fenster(ActionListener F_A)
	{
		super("Aufzug");
		addWindowListener(new WindowClosingAdapter(true));
		setBackground(Color.ORANGE);
		setSize(500,600);
		setLayout(null);
			Button B0 =new Button("Erdgeschoss");
			B0.setBounds(50, 60, 100, 30);
			B0.addActionListener(F_A);
			add(B0);		
			
			Button B1 =new Button("Stockwerk 1");
			B1.setBounds(50, 120, 100, 30);
			B1.addActionListener(F_A);
			add(B1);

		
	}

	
}

class FensterAktionen
implements ActionListener
{
	private Fenster fenster;
	
	public void setFenster(Fenster fenster)
	{
		this.fenster = fenster;
	}
	
	
	public void actionPerformed(ActionEvent event)
	{
		String cmd = event.getActionCommand();
		if (cmd.equals("Erdgeschoss"))
			fenster.setBackground(Color.BLACK);
			else
			{
				//nichts
			}
		if (cmd.equals("Stockwerk 1"))
			fenster.setBackground(Color.GREEN);
			else
			{
				//nichts
			}
	}
}

Lg,
Firephoenix
 

Marco13

Top Contributor
Das war jetzt die Schnellschuss-Lösung. Ob das ganze strukturell so sinnvoll ist, sei mal dahingestellt. Es kann schnell chaotisch werden, wenn man "alle" Button-Aktionen mit EINEM ActionListener machen will. Eine (ungestestete, nur anskizzierte) Alternative mit anonymen Listenern:
Java:
public class Fenster extends Frame
{
    public static void main(String[] args) 
    {
        Fenster window = new Fenster();
        window.setVisible(true);
    }
 
    public Fenster()
    {
        super("Aufzug");
        addWindowListener(new WindowClosingAdapter(true));
        setBackground(Color.ORANGE);
        setSize(500,600);
        setLayout(null);

            Button B0 =new Button("Erdgeschoss");
            B0.setBounds(50, 60, 100, 30);
            B0.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    setBackground(Color.BLACK);
                }
            });
            add(B0);        
            
            Button B1 =new Button("Stockwerk 1");
            B1.setBounds(50, 120, 100, 30);
            B1.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    setBackground(Color.GREEN);
                }
            });
            add(B1);
 
        
    }
 
    
}

Bei mehr Stockwerken würde man es aber ggf. auch anders machen....

Und btw: Sowas wie
Code:
else
{
    // Nichts
}
ist IMHO ziemlich sinnlos ;)
 
F

Firephoenix

Gast
Das mit dem Else mit nichts ist so ne Angewohnheit von mir, hab immer Probleme wenn ich das Else komplett vergesse, daher setze ich immer ein leeres Else - einfach für meine Übersicht.

Wie würdest du das mit den Stockwerken denn anders machen?
Einzige "elegantere" Methode die mir selbst einfällt, wäre die Verwendung einer Schleife zum erzeugen, bzw bei der If-Abfrage eine Case Anweisung (wird auf 5 Buttons ausgeweitet)

Edit: mehrere Actionlistener werde ich zwar mal antesten (danke für den Vorschlag), mein Programm kann später aber schon mit einem aufgebaut werden, da die Buttons nicht mehr machen werden, als in einer Klasse aufzug eine Setmethode mit einem Wert zu übergeben, erschwert also in meinem Fall die Übersicht nicht.

Lg,
Firephoenix
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Wie man das konkret macht, hängt davon ab, was man am Ende erreichen will ;) Du kannst dir mal http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/49255-componenten-listener.html ansehen, aber man könnte das grundsätzlich so machen, dass man irgendwann nur noch ein paar Methodenaufrufe hat wie
Code:
somePanel.add(createButton("Keller", Color.BLACK));
somePanel.add(createButton("Erdgeschoss", Color.RED));
somePanel.add(createButton("Erster", Color.GREEN));
somePanel.add(createButton("Zwoter", Color.BLUE));
somePanel.add(createButton("Dritter", Color.YELLOW));
somePanel.add(createButton("Dach", Color.WHITE));
Die createButton-Methode würde dann einen Button mit der gegebenen Aufschrift erstellen, mit einem anonymen ActionListener dran, der die gegebene Farbe setzt...

Wenn das allgemeiner werden soll (eine allgemeine Modellierung eines Hauses mit beliebig vielen Stockwerken und Farben) dann würde man sich erstmal ein vernünftiges Datenmodell überlegen.

Ist aber nur EINE Möglichkeit, ob das für dich passend wäre, musst du selbst entscheiden...
 
F

Firephoenix

Gast
muss erstmal schauen, inwieweit das auf mein fertiges Programm passt, da die Änderung der Hintergrundfarbe einfach nur ein test war um zu testen ob der Button auch etwas macht.

Ich werd die Tage auf alle Fälle aber das Tool fertig schreiben und dann hier reinstellen, stehe im Moment aber noch vor einem anderem Problem, das kriege ich aber selbst gelöst denke ich.

Lg,
Firephoenix
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Zugriffsproblem auf (zweidimensionales) Array in einer ArrayList Java Basics - Anfänger-Themen 15
D Zugriffsproblem Java Basics - Anfänger-Themen 11
N Klassen Zugriffsproblem Java Basics - Anfänger-Themen 9
M zugriffsproblem Java Basics - Anfänger-Themen 8
M zugriffsproblem! Java Basics - Anfänger-Themen 6
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
shiroX OOP Java Funktion implementieren Java Basics - Anfänger-Themen 3
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
F Funktion immer zur vollen Stunde? Java Basics - Anfänger-Themen 3
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
C Meine erste Funktion Java Basics - Anfänger-Themen 12
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
G OOP Aus Objekt auf Funktion der erzeuger Klasse zugreifen? Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
M Interface als Konstruktorparameter nutzen, um Funktion zu plotten Java Basics - Anfänger-Themen 14
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
J Funktion definieren und ausfuehren Java Basics - Anfänger-Themen 27
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
N mathematische Funktion Java Basics - Anfänger-Themen 29
R Programm verstehen, Funktion Java Basics - Anfänger-Themen 4
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
F Sleep Funktion Java Basics - Anfänger-Themen 12
S Euklid Funktion Java Basics - Anfänger-Themen 8
H Funktion mit Argumenten Java Basics - Anfänger-Themen 5
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben