Basics unklar..

Status
Nicht offen für weitere Antworten.

r0bbe

Mitglied
Hi,

Ich trau's mich fast nicht zu fragen, aber hilft ja nix :(

Durch den Spielebereich wurde ich inspiriert und hab ein Programm geschrieben, dass auf einen JPanel 'nen Kreis zeichnet, den man mit den Pfeiltasten bewegen kann..
Mit einem Thread wird alle 50 ms das JPanel neu gezeichnet, funktioniert auch alles wie ich mir das gedacht habe..
Jetzt wollte ich Instanzen der Klasse Kreis erstellen, die mit zufälligen X und Y Koordinaten auch gezeichnet werden (sollen quasi die "Gegner" werden^^).. Das Problem ist dass ich die Objekte in der Klasse A instanziiere und aus Klasse B darauf zugreifen will / muss, "doch kreis1 cannot be resolved"

Klasse A
Java:
Kreis kreis1 = new Kreis(x, y);
[/jva]

Klasse B
[code=Java]
System.out.println(kreis1.mX);

bzw kreis.getX(); geht auch nicht.. oder auch KlasseA.mX usw. geht alles nicht..

Geht das überhaupt irgendwie?
Ich hab zwar schon oft Objekte erstellt aber sie dann immer in der Klasse wo sie instanziiert wurden gesteuert..
Hab grad nochmal nachlesen wollen zu den Sichtbarkeitsbereichen (dachte eigentlich das hätte ich verstanden) mit Methoden und Variablen hab ich auch keine Probs, für Objekte scheinen andere Spielregeln zu gelten?
(Ja ich weiß die werden entfernt, sobald die Referenz wegfällt aber ich hab die Referenzvariable ned verändert...)

Kann bitte wer nen kurzes Beispiel schreiben oder sagen dass es im Sprachdesign nicht vorgesehen ist?^^

thx..
 

Schandro

Top Contributor
Beispielcode wie man auf Objecte anderer Klassen zugreift:
Java:
pubic class MainClass{
	public static void main(String[] args){
		new MainClass();
	}
	
	public MainClass(){
		List <Kreis> kreise = new ArrayList <Kreis> ();
		kreise.add(new Kreis());
		kreise.add(new Kreis());
		kreise.add(new Kreis());
		
		ControllerClass controller = new ControllerClass(kreise);
		
		// kann jetzt immer controller.doMove() aufrufen, auch außerhalb des Konstruktors wenn man controller zur Membervariable macht.
	}
}

class ControllerClass{
	
	private List <Kreis> kreise;

	public ControllerClass(List<Kreis> kreise){
		this.kreise = kreise;
	}
	
	public void doMove(){
		for(int i=0;i<kreise.size();++i){
			kreise.get(i).moveSomewhere();
		}
	}
}

class Kreis{
	//  paar membervariable mit passenden Konbstruktor und getter/setter
	
	public void moveSomewhere(){
		// verändert z.b. die Varaiblen die für die Position des Kreises stehen...
	}
}

=> man gibt sie ihnen mit.
Es gibt noch andere Lösungen, das hier ist die die meistens am sinnvollsten ist
 

Paat

Aktives Mitglied
Hi,

danke das gleiche interessierte mich auch. Ist das da oben schon sone "Art" MVC ?

Grüße
 

r0bbe

Mitglied
Vielen Dank für das Beispiel hat mir sehr weitergeholfen, funktioniert jetzt :)
Eigentlich eine total logische Sache, einfach übergeben, macht man ja öfter mal :D

Nur noch mal zur Sicherheit, es gibt keine Möglichkeit sie in irgendeiner Art public zu deklarieren und auf die Attribute zuzugreifen auf fremden Klassen?
Ich stelle mir das manchmal schwierig vor eine Klasse instanziieren zu müssen - obwohl man das grad gar nicht will - nur um ein fremdes Objekt nutzen zu können.. Mir fällt grad kein Beispiel ein, aber führt das nicht manchmal zu Schwierigkeiten?
 

Marco13

Top Contributor
Es führt häufiger zu Schwierigkeiten, wenn man das NICHT tut: Man könnte natürlich alles static oder als Singeltons machen, aber das hat mit Objektorientierung dann nichts mehr zu tun - und spätestens, wenn man von so einem ... "Ding" dann mal nicht nur eines, sondern ZWEI Stück haben will, hat man ein Problem.

Beachte, dass die Klasse wirklich nur ein "Bauplan" ist. Die eigentliche Arbeit läuft immer auf Objekten (d.h. Instanzen von Klassen) ab.
 

Paat

Aktives Mitglied
Das mit den Controllern und Listen sieht interessant aus. Ich hätte das jetzt so gemacht:

Java:
...

Kreis[] k = new Kreis[3];
for(int i =0;i < 3;i++){

k[i] = new Kreis();

}

NeueKlasse neu = new Neueklasse(k);
 

Marco13

Top Contributor
Geht auch, List ist ggf. flexibler, wenn man später noch mehr Kreise hinzufügen will.
BTW: Das nennt man "Thread-Hijacking".
 

r0bbe

Mitglied
Objekte sind 'ne tolle Sache, da geb ich dir Recht.
Das blöde ist halt nur dass ich jetzt sowas im Code hab:

new MyJPanel (kreis1);

Dort bastel ich mir das im Konstruktor dann zusammen und kann endlich damit arbeiten, statt einfach wie bei einer Variable die public ist zugreifen zu können :)
Ist halt irgendwie Käse ein JPanel hat ja ned so viel mitm Kreis zu tun....

Naja liegt wohl einfach an meinem schlechten Klassendesign meine Konzentration ist auch langsam weg und ich hab keinen Bock mehr, hab viel geschafft heute finde ich^^

Jedenfalls Dankö für die Hilfe, und angenehmen Abend noch, ich denk da morgen nochmal drüber nach^^

edit: das mit dem hijacking macht nix, ich kenn das^^ wenn's grad gut passt besser als nen eigenen thread aufzumachen :)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Das blöde ist halt nur dass ich jetzt sowas im Code hab:

new MyJPanel (kreis1);
...
Ist halt irgendwie Käse ein JPanel hat ja ned so viel mitm Kreis zu tun....

Ist nur eine Frage des Namens: Nenn' dein MyPanel einfach "KreisRenderPanel", und schon HABEN sie was miteinander zu tun ;) Mal im ernst: Was irgendwo gezeichnet werden soll, muss auch in irgendeiner Form bekannt sein - aber bei zwei Sachen hast du recht: Der Kreis sollte nicht unbedingt im Konstruktor übergeben werden (stattdessesn sollte es sowas wie addKreis oder setKreis geben). Und es stimmt schon, dass man da mit Interfaces ein bißchen mehr Abstraktion reinbringen könnte, für den Fall, dass mal mehr gezeichnet werden soll, als nur ein Kreis - ganz klassisch:
Code:
interface Paintable { public void paintOn(Graphics g); }
class Kreis implements Paintable { ... paintOn malt einen Kreis }

class PaintPanel extends JPanel
{
    private List<Paintable> paintables = ...

    // Methoden: addPaintable, removePaintable...

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        for (Paintable p : paintables) p.paintOn(g);
    }
}
 

r0bbe

Mitglied
Ich habe noch massive Probs meine Programme möglichst abstrakt zu halten und guten Code zu schreiben... ich krieg zwar immer irgendwas zusammen getüftelt, aber man will sich ja lieber gleich 'nen vernünftigen Stil angewöhnen.. Bei Interfaces weiß ich zwar z.B. grob warum sie toll sind und wie man sie deklariert, aber so richtig Klick macht das hier alles irgendwie noch nicht insbesondere Objektorientiertes Denken fällt mir schwer..

Danke jedenfalls für eure Anregungen, ich werd in ein paar Tagen mal meinen Code posten da könnt ihr ja mal drüber gucken ob das vom style her in Ordnung geht wenn ihr wollt.

Also der Threat wird nur schlafen, aber ist nicht tot ;)
 

Paat

Aktives Mitglied
Ich benutze Interfaces meistes nur um wichtige Variablen an einer zentralen Stelle zu flegen *schäm*
 

Schandro

Top Contributor
Sollte man für soetwas nicht besser ein enum verwenden ?
Naja, eigentlich steht enum doch für Aufzählung und nicht für Konstantensammlung, oder?
Für sachen wie
public final static double MEHRWERTSTEUER = 0.19;
machen einfache Konstanten mehr Sinn.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
D Erste Schritte Basics von Java Java Basics - Anfänger-Themen 3
KingDLetsPlay Basics für ein Programm Java Basics - Anfänger-Themen 6
J Java Basics Frage Compiler etc Java Basics - Anfänger-Themen 12
B Java-Basics --> Fehlermeldung nicht verständlich! Java Basics - Anfänger-Themen 8
H Probleme bei den Basics Java Basics - Anfänger-Themen 5
lenniii DB Basics (JDBC-Treiber) Java Basics - Anfänger-Themen 16
C Hilfe bei Schleifen und Basics benötigt Java Basics - Anfänger-Themen 2
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
B Code Zeile unklar Java Basics - Anfänger-Themen 9
A Nächstes Datum ausgeben, if-Schleife unklar Java Basics - Anfänger-Themen 6
N Aufagabenstellung unklar Java Basics - Anfänger-Themen 8
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
M Javaklasse unklar Java Basics - Anfänger-Themen 3
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
A Fehlermeldung Unklar. Java Basics - Anfänger-Themen 1
M Throws Anweisung innerhalb eines Methodenkopfes unklar Java Basics - Anfänger-Themen 4
M This Methode unklar Java Basics - Anfänger-Themen 2
M Arithemtischer Ausdruck unklar Java Basics - Anfänger-Themen 2
K Maven Dependency unklar Java Basics - Anfänger-Themen 5
K .Class Operator unklar Java Basics - Anfänger-Themen 3
K Schnittstelle - Interface unklar Java Basics - Anfänger-Themen 4
D Klasseninitialisierung unklar Java Basics - Anfänger-Themen 3
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
T Collections Java Anfänger - Array-Struktur vollkommen unklar Java Basics - Anfänger-Themen 2
C funktion-ausgabe unklar Java Basics - Anfänger-Themen 10
C Ausgabe unklar Java Basics - Anfänger-Themen 5
S Fehlermeldung bei switch unklar Java Basics - Anfänger-Themen 19
T BufferedReader unklar Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben