Erste Schritte In Klasse B die Methode aus Klasse A in Klasse A ausführen

banax

Mitglied
Hallo,

bin schon lange auf der Suche und finde keine Lösung. Ich habe folgendes vor:

Es gibt Klasse A und Klasse B

Ich habe in Klasse B einen Button, der in Klasse A eine Methode ausführen soll. Diese Methode steht auch in Klasse A.
Wenn ich jetzt in der Klasse B "KlasseA meineKlasse = new KlasseA" -> "meineKlasse.Methode()" schreibe, ist das ja Quatsch. Dann wird die Methode nämlich in Klasse B ausgeführt. Soll aber in Klasse A ausgeführt werden.

Hat jemand ein Codebeispiel oder ähnliches?

Ist das überhaupt verständlich oder wird mein Code gebraucht?

Vielen Dank
Gruß
 

Timothy Truckle

Top Contributor
Wenn ich jetzt in der Klasse B "KlasseA meineKlasse = new KlasseA" -> "meineKlasse.Methode()" schreibe, ist das ja Quatsch. Dann wird die Methode nämlich in Klasse B ausgeführt.
In der Klasse B wird eine Methode auf einem Objekt der Klasse A aufgerufen. Der Inhalt der Methode läuft natürlich im Kontext der Klasse A mit den für dieses Objekt (gerade) gesetzten Eigenschaften weil diese die Klasse B (hoffentlich) gar nicht kennt.

bye
TT
 

banax

Mitglied
Danke. Hab zwar nur zur Hälfte verstanden aber das hat wohl gereicht.
Die Methode ist jetzt static. Dafür musste ich auch das anzusprechende Object auf static setzen. Jetzt geht es aber, da ich kein "new" mehr benutze.
 

Timothy Truckle

Top Contributor
Danke. Hab zwar nur zur Hälfte verstanden aber das hat wohl gereicht.
Die Methode ist jetzt static. Dafür musste ich auch das anzusprechende Object auf static setzen. Jetzt geht es aber, da ich kein "new" mehr benutze.
Bitte wieder zurück ändern.
Niemals ohne guten Grund einfach
Code:
static
verwenden. Dann kannst Du auch gleich Perl Programmieren...

bye
TT
 

banax

Mitglied
Sorry, dachte das wäre klar.
Ich habe diese zwei Klassen. Durch "mousePressed" aus Klasse "MouseL" soll die Methode "changeBalken()" aus Klasse "Start" ausgeführt werden, so das ich die Änderung auch sehe. Das "System.out.println..." aus der Methode "changeBalken()" wird ausgeführt und ist auch in der Konsole zu sehen.

Also zu Anfang wird ja mein JFrame erstellt und darin die ganzen Balken (sind JLabels). Durch einen Klick soll die Methode ausgeführt werden und den Wert ändern.


Java:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MouseL implements MouseListener {

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		Start myStart = new Start();
                myStart.changeBalken();
				
	}



	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}

Java:
import java.awt.Color;
import java.util.Random;
import javax.swing.*;
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;



public class Start extends JFrame implements ActionListener{
	
	private JButton btnRunter;
	public Balken[] balkens = new Balken[100];
	private int balkenindex;
	
	public Start(){
		setSize(500,500);
		setLayout(null);
		
		Random zufall = new Random();
		int posX = 0;
		int posY = 0;
		for (int i = 0; i < 20; i++){
			Color farbe = new Color(zufall.nextInt(255),zufall.nextInt(255),zufall.nextInt(255));	
			balkens[i] = new Balken();
			balkens[i].setBackground(farbe);
			balkens[i].setBounds(posX, posY, 200, 20);
			balkens[i].setText(String.valueOf(i));
			balkens[i].setName(String.valueOf(i));
			balkenindex = i;
			balkens[i].getLabel();
			//balkens[i].addMouseListener(new MouseL());
			
			add(balkens[i]);
			posY += 20;
		}
		balkens[17].setSize(100,20);
		
		
		btnRunter = new JButton();
		btnRunter.setBounds(200,0,200,20);
		btnRunter.addActionListener(this); 
        
        add(btnRunter); 
		
		
	}
	
	public void changeBalken() {
		balkens[4].setText("Balken Nummer 4"); 
		System.out.println("gehts?");
	}
	
	public static void main(final String args[]) {new Start().setVisible(true);}


}

class Balken extends JLabel { 
	private JLabel myLab = new JLabel();
	public JLabel getLabel() {
		setSize(225,20);
		setOpaque(true);
		addMouseListener(new MouseL());
	    return myLab;
	}
}
 
T

tröööt

Gast
[edit]DAS wird so überhaupt nichts ... denn wenn du von JFrame aus einen neuen Listener erstellst ... und in diesem wiederum ein neues JFrame ... dann wird das nicht nur zu ner endlos-rekursion und damit zu nem StackOverflowError ... sondern hat auch überhaupt keinen sinn da du mit völlig anderen objekten arbeitest

korrekterweise müsstest du (wie ich ja schon vermutet habe) MouseL eine instanz von Start mitgeben ... und das ging in dem du z.b. "new MouseL(this)" schreibst ... den konstruktor dann so
Java:
public MouseL(Start start) { this.start=start; }
und dann in der mousePressed() methode auf "start.changeBalken()" callst

dein code hat überhaupt null struktur und so wirklich OOP hast du auch noch nicht verstanden ... geschweige denn grundlagen von GUI-programmierung ...

ich würde dir erstmal empfehlen OOP zu lernen und danach GUI-entwicklung bevor du an diesem code weiterschreibst ...[/edit]


Wenn ich jetzt in der Klasse B "KlasseA meineKlasse = new KlasseA" -> "meineKlasse.Methode()" schreibe, ist das ja Quatsch. Dann wird die Methode nämlich in Klasse B ausgeführt. Soll aber in Klasse A ausgeführt werden.

ähm WHAT ?

was bitte ist das für ein totaler käse ?

wenn man sich den Stack ansieht dann stimmt das zwar schon irgendwie das A.someMethod() im kontext von B abläuft ... aber daran ändert sich nichts nur weil du STATIC nutzt ... denn dem STACK ist es eigentlich ziemlich egal ob er eine static method callt oder vorher ein objekt erzeugt und dann auf dieses den call los lässt ... das was in A.someMethod() abläuft läuft immer noch im stack und thread von B ... daran ändert static überhaupt nichts ...

generell ist das was du sagst recht wirr ... "A.someMethod() soll auch in A ablaufen, nicht in B" ... naja ... ähm ... dann musst du A auch einen eigenen thread und stack spendieren und dann in dessen loop irgendwie melden das "someMethod()" zu callen ist ... das wäre jetzt das einzige was dem was du hier sagst auch nur halbwegs ähnlich wäre

Java:
public class A implements Runnable
{
	private boolean flag=false;
	public A() { }
	public void run()
	{
		while(true)
		{
			if(flag)
			{
				someMethod();
				flag=false;
			}
			Thread.sleep(100);
		}
	}
	private void someMethod()
	{
		// ...
	}
	public void setFlag()
	{
		flag=true;
	}
}

Java:
public class B
{
	// ...
	public void someOtherMethod()
	{
		// ...
		Thread aThread=new Thread(new A());
		aThread.start();
		// ...
		aThread.setFlag();
		// ...
	}
	// ...
}

das wäre jetzt das was dem was du hier ablässt am nächsten kommt ...
du machst aus A ein Runnable ... erzeugst einen neuen Thread dem du A übergibst ... startest diesen ... womit A seinen eigenen thread und stack erhält ... und callst dann irgendwann darauf die methode um das flag zu setzen ...
dann würde "someMethod" auch innerhalb von "A" ablaufen ... unabhängig von B ...

das was du gemacht hast ist absoluter mist ... denn in einer objekt-orientierten sprache prozedual zu schreiben und mit static um sich zu werfen ist eigentlich so ziemlich das falscheste was geht ... zu mal es deiner frage : "someMethod in A laufen lassen" nicht hilft ... denn egal ob static oder nicht ... wenn du "someMethod" in B callst ... läuft die methode auch im thread von B ab ... punkt ...
 

banax

Mitglied
[edit]DAS wird so überhaupt nichts ... denn wenn du von JFrame aus einen neuen Listener erstellst ... und in diesem wiederum ein neues JFrame ... dann wird das nicht nur zu ner endlos-rekursion und damit zu nem StackOverflowError ... sondern hat auch überhaupt keinen sinn da du mit völlig anderen objekten arbeitest

korrekterweise müsstest du (wie ich ja schon vermutet habe) MouseL eine instanz von Start mitgeben ... und das ging in dem du z.b. "new MouseL(this)" schreibst ... den konstruktor dann so
Java:
public MouseL(Start start) { this.start=start; }
und dann in der mousePressed() methode auf "start.changeBalken()" callst

dein code hat überhaupt null struktur und so wirklich OOP hast du auch noch nicht verstanden ... geschweige denn grundlagen von GUI-programmierung ...

ich würde dir erstmal empfehlen OOP zu lernen und danach GUI-entwicklung bevor du an diesem code weiterschreibst ...[/edit]

Danke. Warscheinlich habe ich das gesucht. Das mein Code null Struktur hat, weiß ich auch. Das wird zu Testzwecken viel hin und her geschrieben. Soll kein wirkliches Programm werden.


das was du gemacht hast ist absoluter mist ... denn in einer objekt-orientierten sprache prozedual zu schreiben und mit static um sich zu werfen ist eigentlich so ziemlich das falscheste was geht ... zu mal es deiner frage : "someMethod in A laufen lassen" nicht hilft ... denn egal ob static oder nicht ... wenn du "someMethod" in B callst ... läuft die methode auch im thread von B ab ... punkt ...
Dann war meine Ausdrucksweise falsch. Sorry. Static führte aber zu dem, was ich wollte.
 

Timothy Truckle

Top Contributor
Also prinzipiell solltest Du erstmal dies lesen: Trail: Creating a GUI With JFC/Swing (The Java™ Tutorials)

Alle Interfaces, die
Code:
Listener
heisen sin prinzipiell nicht dazu da sie in top-level-Klassen zu implementieren, die werden in anonymen Klassen dort implementiert, wo sie gebraucht werden. In Deinem Fall in der Klasse
Code:
Start
nach Zeile 26. Natürlich wird so eine anonyme Klasse mit so vielen Methoden unübersichtlich, daher gibt es für solche Interfaces bereits abstrakte Default-Implementierungen mit leeren Methoden (die also nichts tun...). Die heißen üblicher Weise Adapter, in diesem Fall [JAPI]MouseAdapter[/JAPI]. Das würde dann so aussehen:[JAVA=26] balkens = new Balken();
balkens.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
Balken klickZiel = ((Balken)arg0.getSource())
klickZiel.setText("geklickt wurde auf Balken: "+klickZiel.getName()); // einen Namen zu vergeben war 'ne gute Idee
}
}); [/code]

Deine Klasse
Code:
MouseL
kannst Du also löschen.

Die innere Klasse
Code:
Balken
gehört streng genommen auch gelöscht. Was Du da tust könntest Du auch nach der Zeile 26 noch machen. Wenn Du diese Konfigurationen gern zusammenfassen willst (was Du auch solltest), dann in einer Methode von
Code:
Start
Die arbeit so zu verteilen ist jeden falls nicht gut.

Aber genug gemeckert...

bye
TT
 
T

tröööt

Gast
Danke. Warscheinlich habe ich das gesucht. Das mein Code null Struktur hat, weiß ich auch. Das wird zu Testzwecken viel hin und her geschrieben. Soll kein wirkliches Programm werden.

hat damit nichts zu tun ... es geht um den fakt das der code an sich müll ist ... und das du es dir so falsch angewöhnen wirst wenn du da nicht schnell was gegen unternimmst ... zu mal deine ausdrucksweise auch stark zu wünschen übrig lässt ...

und das STATIC hier hilft liegt nur daran das du dann nicht mehr mit zwei verschiedenen objekten sondern nur noch mit einer klasse arbeitest ... und sowas geht in OOP mal überhaupt nicht ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
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
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
B Klassen Abstrake Klasse und Template Methode Java Basics - Anfänger-Themen 4
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
M Klassen Methode in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
M Methode in anderer Klasse aufrufen Java Basics - Anfänger-Themen 5
S Methode in der Klasse erstellen Java Basics - Anfänger-Themen 2
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
R Methode in Singleton Klasse Java Basics - Anfänger-Themen 1
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2
E Threads Methode einer Wartenden Klasse aufrufen Java Basics - Anfänger-Themen 3
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
C Gui- Klasse erkennt Übergabeparameter aus Methode nicht Java Basics - Anfänger-Themen 4
J Methoden Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 12
L Klassen Methode aus anderer Klasse Java Basics - Anfänger-Themen 13
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
M Klassen Methode aus anderer Klasse nicht aufrufbar Java Basics - Anfänger-Themen 11
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
F Methode anderer Klasse aufrufen Java Basics - Anfänger-Themen 1
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
S Methoden Methode einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 5
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
AssELAss Klassen Java Klasse in main-methode ausführen Java Basics - Anfänger-Themen 7
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
G Methode einer Abstrakten Klasse aufrufen Java Basics - Anfänger-Themen 1
A Methode aus einer anderen Klasse ausführen Java Basics - Anfänger-Themen 7
H Klasse bzw methode der Klasse in einer anderen Klasse benutzen Java Basics - Anfänger-Themen 4
P OOP Eingabevariablen der Klasse Raum in der Methode addEvent ans Ende einer ArrayList einfügen Java Basics - Anfänger-Themen 3
S Methode außerhalb der Klasse definieren Java Basics - Anfänger-Themen 5
E Methode aus Klasse eins in Klasse zwei verwenden? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
B Klasse: Methode Clone Java Basics - Anfänger-Themen 5
O Klasse übergeben und Methode aufrufen Java Basics - Anfänger-Themen 6
M Dynamische Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 11
T [Erledigt] Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 0
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
L Erste Schritte Methode aus anderer Klasse verwenden Java Basics - Anfänger-Themen 16
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
P Methode außerhalb der Klasse aufrufen Java Basics - Anfänger-Themen 10
S Methoden Methode einer anderen Klasse ausführen? Java Basics - Anfänger-Themen 6
M Methode aus einer Klasse aufrufen Java Basics - Anfänger-Themen 6
R Compiler-Fehler Klasse A nutzt Objekt von Klasse B, um Methode von Klasse B auszuführen Java Basics - Anfänger-Themen 11
H Programmiertechnik: Methode einer Klasse beim Anlegen überschreibt Java Basics - Anfänger-Themen 3
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
M Methode mit beliebigen Parametern in abstrakter Klasse definieren Java Basics - Anfänger-Themen 8
A Arraylist einer Methode, gefüllt einer anderen Klasse übergeben Java Basics - Anfänger-Themen 17
A Mit Methode auf Methode derselben Klasse zugreifen Java Basics - Anfänger-Themen 3
C Problem mit Zugriff auf Variable bzw. get-Methode in anderer Klasse Java Basics - Anfänger-Themen 2
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
A Methode aus anderer Klasse Java Basics - Anfänger-Themen 5
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
L Methoden Eine Methode aus einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 4
M Methode einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 7
S Klassen Methode von Klasse lesen Java Basics - Anfänger-Themen 10
D Methoden Methode über andere Klasse aufrufen Java Basics - Anfänger-Themen 7
J Methode vom Typ einer Klasse!? Java Basics - Anfänger-Themen 8
L Objekt.methode(new Klasse().methode()); Java Basics - Anfänger-Themen 7
N Klassen Klasse - Objekt - Methode Java Basics - Anfänger-Themen 6
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
T Klasse in Main Methode Java Basics - Anfänger-Themen 3
H Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 7
R Auf get-Methode von ArrayList zugreifen von Methode einer Klasse Java Basics - Anfänger-Themen 2
J Klasse Student - Methode immatrikullieren, exmatrikullieren, altersdurchschnitt Java Basics - Anfänger-Themen 15
Corben Methoden Methode einer Abstrakten Klasse Java Basics - Anfänger-Themen 7
L Methoden Auf statische Methode einer anderen Klasse zugreifen, die Array zurückgibt Java Basics - Anfänger-Themen 3
C Objekt X über Methode aus anderer Klasse verändert Java Basics - Anfänger-Themen 3
I Von einer Methode eines Objektes auf Attribut eines Objektes anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
S Main-Methode aus anderer Klasse heraus starten Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben