JFrame zeigt Hintergrund und nicht den Inhalt

Status
Nicht offen für weitere Antworten.

Freak

Mitglied
Hi. Hab ein Problem mit JAVA und zwar immer wenn ich ein Programm ausführen will das ein Frame benötigt wird der Hintergrund duchsichtig und ich seh die Entwicklungsumgebung. Am Anfang hat es eh noch richtig funktioniert, aber jetzt ist eben dieses Problem aufgetreten. Weiss jemand was ich tun soll?
 

Quaxli

Top Contributor
Ja, führe das Programm nie an Tagen mit ungerader Stundenzahl aus und stelle sicher, daß Du keine Java-Version mit linksdrehenden class-Files hast.

Wenn das nicht hilft, poste ein Beispielprogramm und schreibe uns, welches Entwicklungsumgebung Du verwendest. Das ist aber eher so die allerletzte Notlösung.
 

André Uhres

Top Contributor
Lass dich nicht von Quaxli ins Boxhorn jagen!
Du blockierst wahrscheinlich den EDT (Event Dispatch Thread).
Das Problem könnte man etwa so simulieren:
Code:
   public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new PinDemo().setVisible(true);
                try {
                    Thread.sleep(900000);
                } catch (InterruptedException ex) {
                }
            }
        });
    }
wobei PinDemo der JFrame wäre.
 

Freak

Mitglied
Danke. Ich werde es probieren. Geht es auch eigentlich auch ohne dem, weil sonst muss ich das ja zu jedem Programm dazuschreiben.
 

thE_29

Top Contributor
Es wäre nett wenn du mal dein Programm posten würdest um den Fehler besser zu analysieren ;)
 
G

Guest

Gast
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JumpingBalls extends JFrame {

	//Richtung und Position initialisieren
	private int xPos = 1;
	private int yPos = 1;
	private int xRicht = 3;
	private int yRicht = 1;

	//JFrame erzeugen
	public JumpingBalls(){
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);

		//Timer erzeugen
		Timer timer = new Timer (100,
				new ActionListener(){
			public void actionPerformed (ActionEvent e){
			}
		}
		);
		timer.start();
	}

	//Ball zeichnen
	public void paint(Graphics g){
		g=getContentPane().getGraphics();
		g.setColor(Color.black);
		g.fillOval(0, 0, 50, 50);
	}

	//main-Methode
	public static void main(String[] args) {
		new JumpingBalls();
	} 

	//Ball bewegen
	public void move(){

		//Länge und Breite initialisieren
		int h=getContentPane().getHeight();
		int w=getContentPane().getWidth();

		Graphics g = getContentPane().getGraphics();
		g.setColor(Color.white);
		g.fillOval(xPos, yPos, 50 ,50);
		g.setColor(Color.blue);

		if(xPos>w-50 || xPos<=0){
			xRicht*=-1;
		}
		if(yPos>h-50 || yPos<=0){
			yRicht*=-1;
		}

		g.fillOval(xPos, yPos, 50, 50);
	}
}
 
G

Guest

Gast
Was soll ich jetzt genau machen? Ich meine in der Schule funktioniert mein Programm ja gut, nur halt zu hause nicht. Also am Programm kann es ja nicht liegen.
 

Quaxli

Top Contributor
Also am Programm kann es ja nicht liegen.

Doch, tut es. Daß es bei Dir in der Schule zufällig funktioniert, heißt nicht, daß es richtig ist. Sieht man ja daran, daß es bei Dir zuhause nicht tut was es soll. Bei mir übrigens auch nicht.

Aber wer Code postet kriegt auch geholfen ;): Weiter unten Dein Programm, an dem ich mal ein bißchen rumgefrickelt habe, so daß es läuft, wenn auch nicht schön. Zu den Ursachen gleich mehr:

Änderungen:
Üblicherweise wird nur in der überschriebenen paint-Methode gezeichnet - nirgendwo sonst. Es gibt ein paar wenige Ausnahmen, aber für als Anfänger kannst Du das als eiserne Regel betrachten: getGraphics() == böse ;)
Ich habe die Änderungen kommentiert, so daß Du nachvollziehen kannst, was ich geändert habe.

Warum es nicht schön läuft:
Du hast von JFrame geerbt. Das funktioniert prinzipiell, aber wenn Du das Programm startest, wirst Du sehen, daß der Ball einen Spur zieht. Ursache ist, daß JFrame nicht doppelgepuffert ist. Dieses müßtest Du entweder einbauen (Forumssuche: Doppelbufferung) oder aber (die bessere Lösung) lieber von JPanel erben, welches von Haus aus doppelt gepuffert ist.


Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JumpingBalls extends JFrame {

	private static final long	serialVersionUID	= 1L;
	
	//Richtung und Position initialisieren
   private int xPos = 1;
   private int yPos = 1;
   private int xRicht = 3;
   private int yRicht = 1;

   //JFrame erzeugen
   public JumpingBalls(){
      setSize(800, 600);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);

      //Timer erzeugen
      Timer timer = new Timer (100,
            new ActionListener(){
         public void actionPerformed (ActionEvent e){
        	 move(); // --> hab' ich hier mal eingebaut
         }
      }
      );
      timer.start();
   }

   //Ball zeichnen
   public void paint(Graphics g){
      //g=getContentPane().getGraphics(); --> Graphics wird an die Methode übergeben
      g.setColor(Color.black);
      //g.fillOval(0, 0, 50, 50);
      g.fillOval(xPos,yPos,50,50);
   }

   //main-Methode
   public static void main(String[] args) {
      new JumpingBalls();
   }

   //Ball bewegen
   public void move(){

  	  System.out.println("hier");
      //Länge und Breite initialisieren
      //int h=getContentPane().getHeight(); --> weiter unten anders abgefragt
      //int w=getContentPane().getWidth();

      /*Graphics g = getContentPane().getGraphics();  --> Zeichnen nur in paint-Methode! 
      g.setColor(Color.white);
      g.fillOval(xPos, yPos, 50 ,50);
      g.setColor(Color.blue);*/   
  	 

  	  //move enthielt keine Positionsänderung
  	  xPos += 1;
  	  yPos += 1;
  	 
      //Abfrage der Grenzen hier
      if(xPos>getWidth()-50 || xPos<=0){
         xRicht*=-1;
      }
      if(yPos>getHeight()-50 || yPos<=0){
         yRicht*=-1;
      }

      //g.fillOval(xPos, yPos, 50, 50); --> dto.
      repaint(); // --> jetzt wird gemalt
   }
}
[/quote]
 

Quaxli

Top Contributor
Im Folgenden nochmal ein Beispiel mit JPanel als Vaterklasse. Außerdem habe ich den Timer rausgeschmissen und an der Bewegungsberechnung rumgespielt. Ich habe das Wichtigste kommentiert. Wenn Du Fragen hast, frage.


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

//Erbt von JPanel und Implementiert Runnable um GameLoop in separatem Thread auszuführen
public class JumpingBalls extends JPanel implements Runnable {

	private static final long	serialVersionUID	= 1L;

	//Richtung und Position initialisieren
	// Positionswerte als Double wg. höherer Rechengenauigkeit 
	private double						xPos							= 50;
	private double						yPos							= 50;
	//Anpassung der Änderungen an die neue Bewegungsberechnung
	private int								xRicht						= 100;
	private int								yRicht						= 20;
	
	//neue Variablen
	JFrame										frame;
	long											last							= 0;

	public static void main(String[] args) {
		new JumpingBalls();
	}

	//JFrame erzeugen
	public JumpingBalls() {
		//Fenster erzeugen
		frame = new JFrame("Moving Ball");
		frame.setSize(800, 600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		
		setPreferredSize(new Dimension(800, 600));
		frame.add(this); //dieses Panel in den Frame packen

		frame.setVisible(true); // frame anzeigen

		last = System.nanoTime(); //Variable für Zeitmessung initialisieren

		//Ersetzen des Timers durch eigenen Thread. Damit läuft die Spielschleife separat in der Run-Methode
		// ggf. in Threads einlesen ;-)
		Thread t = new Thread(this);
		t.start();

	}

	//Ball zeichnen - bei JPanels immer paintComponent überschreiben, statt paint
	public void paintComponent(Graphics g) {
    super.paintComponent(g); //super-Aufruf nie vergessen! Sonst wird u. U. schlecht gezeichnet
		g.setColor(Color.black);
		// da xPos und yPos jetzt double sind, zum Zeichnen nach int casten
		g.fillOval((int) xPos, (int) yPos, 50, 50);
	}

	// Spielschleife bzw. GameLopp als separater Thread
	public void run() {

		//Ausführen solange man ein Fenster sieht
		while (frame.isVisible()) {

			//Zeit messen, die für den letzten Loop benötigt wurde. Auflösung in Nano-Sekunden
			long delta = System.nanoTime() - last; 
			//akt. Zeit für nächsten Loop merken
			last = System.nanoTime();

			//Bewegungsänderung in Abhängigkeit von der benötigten Zeit. Damit ist eine flüssige Bewegung gewährleistet			
			if (xRicht != 0) {
				xPos += xRicht * (delta / 1e9);
			}

			if (yRicht != 0) {
				yPos += yRicht * (delta / 1e9);  //1e9 = 10 hoch 9
			}

			//Ränder abfragen
			if (xPos >= getWidth()-50 || xPos <= 0) {
				xRicht *= -1;
			}

			if (yPos >= getHeight()-50 || yPos <= 0) {
				yRicht *= -1;
			}

			//Neuzeichnen anstoßen
			repaint();

			//Thread kurz schlafen legen, sonst wird alles andere gebremst.
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
			}

		}

	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tobero JFrame nimmt keinen Key oder Maus inputs Allgemeine Java-Themen 0
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
N JFrame für Minispiele Allgemeine Java-Themen 14
F JFrame fü Eclipse wie? Allgemeine Java-Themen 6
4 Swing JFrame BackgroundColor Allgemeine Java-Themen 3
RalleYTN Merkwürdiger Fehler mit JFrame im Vollbild Allgemeine Java-Themen 4
snipesss Visueller Countdown in JFrame Allgemeine Java-Themen 1
K Swing OpenStreetMap in JFrame einfügen Allgemeine Java-Themen 1
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
S JFrame Variable mitgeben Allgemeine Java-Themen 5
F JFrame übergeben Allgemeine Java-Themen 5
B JFrame Text Ausgabe Allgemeine Java-Themen 7
T JFrame Overlay Allgemeine Java-Themen 1
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
I JFrame vor schliessen, methode auführen Allgemeine Java-Themen 2
I JFrame Icon in Main übergeben Allgemeine Java-Themen 1
? AWT Translucent JFrame mit repaint Allgemeine Java-Themen 4
S OOP JFrame als Observer eines JPanel Allgemeine Java-Themen 3
X Modalität von JDialog nachträglich in JFrame implementieren? Allgemeine Java-Themen 8
P Ableitungsfehler JFrame Allgemeine Java-Themen 5
A Excel Tabelle in JFrame darstellen Allgemeine Java-Themen 6
S JFrame an Fenstergröße anpassen Allgemeine Java-Themen 16
G JPanel in JFrame Allgemeine Java-Themen 9
S JDialog Daten ins JFrame übergeben Allgemeine Java-Themen 5
E Grafiken auf dem JFrame Allgemeine Java-Themen 5
D Bilder in JFrame anzeigen Allgemeine Java-Themen 5
X Kann JLabel in JFrame nicht aktualisieren Allgemeine Java-Themen 3
J pack() lässt JFrame grau Allgemeine Java-Themen 3
J JFrame / PopUp-Menü bearbeiten Allgemeine Java-Themen 2
M JFrame absolut im Vordergrund Allgemeine Java-Themen 2
D JFrame nur in eine Richtung resizen Allgemeine Java-Themen 6
X JFrame sichtbar bei einem gesperrten Computer Allgemeine Java-Themen 11
U Zeichnen mit JFrame. Allgemeine Java-Themen 5
P JPanel - JFrame Allgemeine Java-Themen 6
N JFrame Icon selbst erzeugen Allgemeine Java-Themen 2
T applet und JFrame Allgemeine Java-Themen 12
T abspeichern und laden von objekten in JFrame Allgemeine Java-Themen 2
Developer_X JFrame verkleinern Allgemeine Java-Themen 20
D Problem mit Tooltips und JFrame (Tooltips sind zu kurz!) Allgemeine Java-Themen 4
Z Uralt-Applet in JFrame Anwendung konvertieren Allgemeine Java-Themen 12
G Bilder einer Webcam im JFrame anzeigen Allgemeine Java-Themen 5
D Von Thread auf JFrame zugreiffen? Allgemeine Java-Themen 5
M JFrame anpassen Allgemeine Java-Themen 4
M Neues JPanel in JFrame einbinden Allgemeine Java-Themen 6
W Das schließen des JFrame abfangen, wiei? Allgemeine Java-Themen 6
M PDF auf JFrame Allgemeine Java-Themen 10
D JFrame vergrößert nicht auf die gewünschte Größe Allgemeine Java-Themen 2
MQue JFrame nur einmal öffnen Allgemeine Java-Themen 3
MQue Fokus von Komponenten/JFrame Allgemeine Java-Themen 3
MQue JFrame bleibt hängen Allgemeine Java-Themen 3
P Image auf JPanel auf JFrame Allgemeine Java-Themen 3
P JPanel in JFrame Allgemeine Java-Themen 2
T Sound in JFrame: Ich krichs nich hin =( Allgemeine Java-Themen 7
E 2 Images auf einem JFrame Allgemeine Java-Themen 8
TheJavaKid Component in der Titelleiste vom JFrame? Allgemeine Java-Themen 18
G Word-Dokument in einem JFrame Allgemeine Java-Themen 2
T Servlet und JFrame Allgemeine Java-Themen 2
S JFrame mit Wartezeit Allgemeine Java-Themen 12
thE_29 Java App/JFrame Bildschirm "sperren" Allgemeine Java-Themen 10
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
T JFrame in Statusleiste minimieren Allgemeine Java-Themen 4
D JFrame nicht per Hand schreiben Allgemeine Java-Themen 5
G wie Klasse in JFrame "einfügen" Allgemeine Java-Themen 12
G JFrame nimmt mein Image nicht Allgemeine Java-Themen 2
S visible prob mit JFrame und JDialog Allgemeine Java-Themen 4
A JFrame-Liste Allgemeine Java-Themen 4
J JFrame Problem beim schließen Allgemeine Java-Themen 2
R java.awt.Component.setCursor() fehlt bei der JFrame doc Allgemeine Java-Themen 2
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
Y paintComponent zeigt nix an Allgemeine Java-Themen 3
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
D Java zeigt Buttons nicht korrekt an Allgemeine Java-Themen 0
T Stacktrace zeigt ...(Unknown Source) Allgemeine Java-Themen 10
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
Messoras List zeigt nur das letzte Element an Allgemeine Java-Themen 14
lumo Row Header ist public, zeigt die funktion aber nicht public Allgemeine Java-Themen 8
N Array Element vom Typ eines Objekts zeigt auf ein anderes A. Allgemeine Java-Themen 4
S Eclipse zeigt build.xml immer als fehlerhaft Allgemeine Java-Themen 12
S findbugs zeigt unter Eclipse 3.2 nichts an Allgemeine Java-Themen 2
C Java zeigt keine Fensterinhalte Allgemeine Java-Themen 3
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
G BlueJ Hintergrund Allgemeine Java-Themen 10
Aruetiise LayoutManager JButton in den Hintergrund Allgemeine Java-Themen 7
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
x22 Hintergrund in Netbeans ändern Allgemeine Java-Themen 3
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
J Java-Programm im Hintergrund Allgemeine Java-Themen 3
P Hintergrund-Transparent PNG imageMerge Allgemeine Java-Themen 11
C Programm das im Hintergrund läuft Allgemeine Java-Themen 2
L Problem mit Hintergrund bei JAVA Applet Allgemeine Java-Themen 27
S BufferedImage mit Transparenten Hintergrund Allgemeine Java-Themen 4
M Hintergrund bei meiner Uhr Allgemeine Java-Themen 7
F Programm im Hintergrund Allgemeine Java-Themen 8
G java Programm im Hintergrund laufen lassen Allgemeine Java-Themen 8
M Threads starten und im Hintergrund ablaufen lassen Allgemeine Java-Themen 11
K Bildschirm Hintergrund ändern Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben