Nichtstatische Objekte in der paint()-Methode

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich versuche ein Seil zu programmieren, und hab das spielfeld in eine Klasse ausgelagert. in dieser klasse hab ich eine paintmetode die den ball zeichnen soll, der in einer anderen klasse ist, nur eclipse sagt:
Erstellen eines statischen (static) Verweises für das nicht-statische Feld Ball nicht
möglich

Das Spelfeld
Code:
import javax.swing.*;
import java.awt.*;

public class Spielfläche extends JPanel {
[...]
	@Override
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		g.setColor(Ball.getFarbe());//Hier der Fehler
		[...]
	}

Der Ball:
Code:
import java.awt.*;

public class Spielball {


	private Color Farbe;
[...]
	public void SpielBall() {
	             Farbe = Color.RED;
	}

[...]
	public Color getFarbe() {
		return Farbe;
	}

}
Ball wird natürlich als neuer Spielball definiert.
 

ARadauer

Top Contributor
g.setColor(Ball.getFarbe());//Hier der Fehler
mhn warum ist Ball hier groß? variblen schreibt man klein (ist kein fehler, aber nicht schön)
wo instanzierst du den ball?

sehr seltsam...

kann es sein, dass es eine Klasse Ball gibt und er fälschlicherweise die klasse meint und du das objekt...

poste mal bitte mehr code.
 
G

Guest

Gast
Warum Ball groß? keine Ahnung, evtl weil Ball ein Objekt ist.

Reicht der Code? (Ich weiß, dasss er sich ein bisschen geändert hat



Game.java(Hauptdatei)

Code:
import include.*;

public class Game {

	public static void main(String[] args) {
		doInitializations();
		SpielThread Spiel = new SpielThread();
		Spiel.run();

	}
	static void doInitializations(){
		Fenster wnd=new Fenster();
		wnd.anzeigen();
		
	}

}
Fenster.java
Code:
package include;


import javax.swing.*;
import java.awt.*;

public class Fenster extends JFrame {

	public Fenster() {
		super("Das Spiel");

		// Layout setzen und Buttons hinzufügen
		Container contentPane = getContentPane();

		contentPane.setLayout(null);

		Spielfläche Fläche = new Spielfläche();
		Fläche.setLocation(0, 0);
		contentPane.add(Fläche);
		this.setResizable(false);

		// contentPane.add(new JButton("Start"));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public void anzeigen() {
		this.setVisible(true);
		Insets tmp = this.getInsets();
		this.setSize(tmp.left + tmp.right + 900, tmp.top + tmp.bottom + 600);
		tmp = null;
	}

	public void verstecken() {
		this.setVisible(false);
	}

}
Spielfläche.java
Code:
import javax.swing.*;
import java.awt.*;

public class Spielfläche extends JPanel {

	int breite = 800;

	int höhe = 600;

	public Spielfläche() {
		super(true);

		this.setSize(this.breite, this.höhe);

		this.setBounds(0, 0, breite, höhe);
		this.setBackground(Color.BLACK);

	}
	@Override
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Spielball Ball=SpielThread.Ball;// Hier der Fehler ############
		g.setColor(Ball.getFarbe());
		g.fillRect(10,100,20,300);
	}

}
SpielThread.java
Code:
package include;

public class SpielThread extends Thread{
	public Spielball Ball;
	
	public void run(){
		doInitializations();
	}
	public void doInitializations(){
		Ball=new Spielball();// Hier Ball instanzierung###########
	}
}
Code:
package include;

import java.awt.*;

public class Spielball {
	private int x_pos;

	private int y_pos;

	private int radius;

	private Color Farbe;

	public void SpielBall() {
		x_pos = 400;
		y_pos = 300;
		radius = 10;
		Farbe = Color.RED;
	}

	public int getX_pos() {
		return x_pos;
	}

	public int getY_pos() {
		return y_pos;
	}

	public int getRadius() {
		return radius;
	}

	public Color getFarbe() {
		return Farbe;
	}

}
 

Templon

Bekanntes Mitglied
Variabel Namen schreibt man klein!

"Spielfläche" ist im falschan package, entweder du importierst "SpielThread", oder du änderst das package in include (Momentan ist es im default Package).

PS: Mach ball nicht public, sondern private und verwende getter und setter um darauf zu zugreifen (Kapselung).
 
G

Guest

Gast
Spielfläche ist auch in inlude, is nur beim rauskopieren verschwuden
ball sind eig die variablen private und ich hab getter oder was meinst du?
 

Templon

Bekanntes Mitglied
War nur so ein Tipp, dass wird dein Fehler nicht beheben.

Ich meinte du solltest in der SpielThread Klasse die Variable:
Code:
 public Spielball Ball;

Klein schreiben, und public durch private ersetzten und dann noch getter und setter dazu erstellen.

Edit: Habe erst jetzt dein Kompilierfehler gesehen. Du müsstest Ball auch noch static machen damit das geht.
Würde ich dir aber abraten. Deine SpielThread Klasse scheint mir ziemlich überflüssig, ich würde den Ball member einfach in Spielfläche speichern.
 
G

Guest

Gast
Spielthread msoll ja noch gefüllt werden...
und den ball static ist nicht ganz meine vorstellung, ich will ja noch etl mehrere bälle erzeugen können.
 
G

Guest

Gast
Ich möhte halt am liebsten die paintCmponent nicht static setzten, das geht warscheinlich nicht.
kann man da nih irgendwas mit getgraphics oä machen?
 
B

Beni

Gast
Klar kann man das Programm ohne ein einziges "static" schreiben, nur muss man den Ball herumreichen.

Beispiele

Dein Code könnte dann irgendwie so aussehen wie unten. Entweder wird der Ball über den Konstruktor dem Spielfläche übergeben, oder später mit einer Methode gesetzt (alternativ könnte die Spielfläche den Ball generiere und alle anderen fragen die Spielfläche nach ihm).
Code:
public class Spielfläche ...{
  private Ball ball;

  public Spielfläche( Ball ball ){
    this.ball = ball;
  }

  public void setBall( Ball ball ){
    this.ball = ball;
  }
}
 
G

Guest

Gast
Ich mein halt, dass es für mich so aussieht dass die paintcomponent static ist, da die fehlermeldung in ihr ist
Erstellen eines statischen Verweises auf die nicht statische Methode getBall() vom Typ SpielThread
nicht möglich
Da ist irgendwie die paint metode statisch..
kann man dasändern mein ich, oder wie soll ich die fehlermeldung interpretieren?
 

Wildcard

Top Contributor
Nein, die Methode ist nicht statisch, sonst würde sie ein static in der Singnatur tragen.
SpielThread.Ball Du versuchst auf 'Ball' statisch zuzugreifen und das geht nicht.
 
G

Guest

Gast
Ich will aber nicht statisch zugreifen. ich dachte mit der jetzt vorhandenen methode getball gets:
Code:
public class SpielThread extends Thread{
	private  Spielball ball;
[...]
	public Spielball getBall(){
		return ball;
	}
	
}

Code:
public class Spielfläche extends JPanel {
 [...]
	@Override
  protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Spielball ball=SpielThread.getBall();
		g.setColor(ball.getFarbe());
	}

}
 

ARadauer

Top Contributor
SpielThread.getBall();
das geht doch gar nicht oder??? willst du hier auf eine klassenvariable oder objektvariable zugreifen?

les dir bitte nochmal die grundlagen zu klassen und objekten bzw static durch...
 
G

Guest

Gast
getBAll gibt es jetzt siehe oben, hab extra die definmition hingepostet
 
B

Beni

Gast
Code:
SpieleThread.getBall();
Das "SpieleThread" ist der Name der Klasse. Wann immer du "Klassenname.xyz" schreibst, machst du eine statischen Zugriff auf "xyz". Das funktioniert nur, wenn "xyz" als "static" markiert ist.

"static" bedeuted, dass eine Variable (oder Methode) mit einer Klasse verbunden ist, es ist eine sog. Klassenvariable.
Variablen die nicht "static" sind, sind hingegen an ein konkretes Objekt gebunden, sie sind sog. Objektvariablen.

Es ist meist eine schlechte Idee eine Variable an eine Klasse zu binden, die Variable existiert dann nämlich nur ein einziges mal im gesammten Programm. Eine Objektvariable kann hingegen so oft existieren wie du es für notwendig hälst.

In deinem Beispiel oben muss "Spielefläche" einfach ein Objekt vom Typ "SpieleThread" kennen.
Code:
public class SpieleFläche extends JPanel{
  private SpieleThread thread;

  public SpieleFläche( SpieleThread thread ){
    this.thread = thread;
  }

   @Override
  protected void paintComponent(Graphics g){
      super.paintComponent(g);
      Spielball ball=thrad.getBall();
      g.setColor(ball.getFarbe());
   } 
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Detlef Bosau nichtstatische Innere Klasse, this Pointer. Java Basics - Anfänger-Themen 47
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Objekte-Fragen Java Basics - Anfänger-Themen 1
T Objekte in der Methode Java Basics - Anfänger-Themen 8
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben