sich bewegende grafische Objekte

Kampfzwereg

Bekanntes Mitglied
Hallo zusammen,

weiß jemand wo ich mir Wissen über grafische Objekte aneignen kann?
Hab zwar bei "Java ist auch einen Insel" geguckt, da steht aber ziemlich viel und nichts konkretes.

Ich würde gernen (ganz simpel) einen Ball erzeugen, der von A nach B läuft.

Lg Kampfzwerg
 

Kampfzwereg

Bekanntes Mitglied
so schnell schonAntworten wow :)....

@njans: nur 2d. Ganz simpel.

@All: also ich werd mir mal die Linksdurchlesen. Danke schonmal. Is das generell denn schwierig oder muss man sich da erst ne Woche reinfuchsen?
 

pro2

Bekanntes Mitglied
Ach um einen Kreis zu zeichnen, der sich z.B. erstmal auf Knopfdruck bewegt, brauchst du, wenn du dich z.B. mit Java auskennst, aber den Rest noch lesen musst, vielleicht ne Stunde +- (und das ist viel Zeit :D)
 

HimBromBeere

Top Contributor
Das schwierigste dürfte dabei sein, einen Ball als Bild zu zeichnen :D (je nach Komplexitätsgrad desselben, handelt es sich nur um eine Kugel oder soll der Ball auch sowas wie eine Textur beinhalten?)
der Rest geht dann recht schnell...
 

Kampfzwereg

Bekanntes Mitglied
ja es soll nur wirklich ne ganz simple Kugel sein, die sich ein stück nach rechts bewegt, kurz anhält und sich weiter bewegt.denke dann, dass das machbar ist ;-)
wenn ich schonmal dabei bin , werf ich dass, wenn erlaubt, auch kurz hinterher :
gibt es einen befehl , der ein programm x Sekunden lang warten lässt, ohne aus mehr als zig Zeilen zu bestehen. Hab son bissel rumgestöbert, und das muss man teilweise ganzen Methoden entwerfen.
Hab zwar sone Methode gefunden : thread.wait(x)" aber die funzt irgendwie nciht wirklich.
 
G

Gast2

Gast
Java:
try {
  Thread.sleep(x);
} catch (InterupptedException ie) {
  // dont care...
}
 

Kampfzwereg

Bekanntes Mitglied
Hey ich bins nochmal.

Also ich hab mich da nen bisschen durchgewuselt und bin zu dem Ergebnis gekommen:
Ich hab nen jFrame(Flughafen) der ne Queue hat die Nods kennt. In denen werden dann Objecte des Typs Flugzeug gespeichert.
Im jFrame hab ich nen Methode run() , die durchgehend ausgeführt wird.

Java:
public  void run()
  {
    while(true)
    {
      zaehler++;
      repaint();
      waiting(1);
    }
  }

Dann noch die Methode paint() die (erst) eine einfach Linie zeichnet.
Java:
public void paint(Graphics g)
  {
     super.paint(g);
     {
       g.drawOval(zaehler,100,10,10);
     }
  }

Und die die Methode waiting() ,die eigentlcih erstmal nicht so wichtig ist.
Java:
public static void waiting (int n)
{
     long t0, t1;
     t0 =  System.currentTimeMillis();
     do
    {
        t1 = System.currentTimeMillis();
     }while ((t1 - t0) < (n ));
}

Problem:
1:Es wird nur ein Kreis gezeichnet und nicht "mehrere" die durch das Bild wandern.

2:Außerdem würd ich gerne das ganze auf Knopfdruck mahcen. Also beim ActionPerformed.

3: Das Weiteren würd ich gerne Wissen ob man mehrere Kreise gleichzeitig durchs Bild laufen lassen kann(also versetzt).Das bedeutet, dass man , wenn man das auf einen FLughafen bezieht, einen Kreis8Fleugzeug, was sich gerade bewegt(Bildlichauf einen Landebahn) und gleichzeitig 4 weitere Kreise, die sich im Kreis bewegen und sozusagen warten, bis der erste Kreis nen bestimmten Pixel/Koordinate erreicht hat. Hat da einer nen Lösungsansatz?

LG Kampfzwerg
 

HimBromBeere

Top Contributor
Ich seh hier auch nur einen Kreis
Java:
g.drawOval(zaehler,100,10,10);
Wie sollen damit mehrere Kreise gezeichnet werden?`Is ja nur einer, der in x-Richtung wandert...
Willst du mehrere Kreise zeichnen, musst du dein .drawOval halt auch mehrmals ausführen... einmal pro Ellipse (das ist es ja genaugenommen...)
 

Kampfzwereg

Bekanntes Mitglied
mit mehreren Kreisen mei nich einen der auf der x-Achse wandert. sind ja im Grunde ganz viele Kreise , die halt immer gelöscht werden. Aber der bewegt sich halt nicht. Das ist das prob
 
G

Gast2

Gast
Lass dir dann halt mal zähler (umlaute vermeiden!!) in der paint Methode ausgeben, ändert sich der Wert da?
 

Kampfzwereg

Bekanntes Mitglied
hmmm....ich hab mit
Java:
 System.out.println(""+zaehler);

probiert was auszugeben. da kommt aber nix?!

Warum soll run nicht ausgeführt werden?. wird das nicht einfach so wegen dem While(true)?
 

HimBromBeere

Top Contributor
run() läuft nur, wenn deine Klasse das Interface Runnable implementiert UND der Thread mit Klasse.start() gestartet wurde...

EDIT: Dafür erstellst du einfach ´nen neuen Therad im Konstuktor deiner Klasse:
Java:
Thread t = new Thread(this);
t.start();

Nachdem du das getan hast, wird run() auch wirklich ausgeführt...
 
Zuletzt bearbeitet:

Kampfzwereg

Bekanntes Mitglied
wo schreib ich denn das "start" hin...? also in den Konstruktor?

vor allem ...was soll das "this" als Parameter? Ich meine Klasse Flughafen hat keine Parameter die übergeben werden müssen?!
 
Zuletzt bearbeitet:
G

Gast2

Gast
Wenn deine Klasse Runnable implementiert:
Code:
new Thread(deinRunnable).start();
 

Kampfzwereg

Bekanntes Mitglied
Java:
Compiliere L:\Schule\Informatik\Projekte JavaE\Flughafen\Flughafen.java mit Java-Compiler
Flughafen.java:20:22: error: no suitable constructor found for Thread(Flughafen)
  private Thread t = new Thread(this);
                     ^
    constructor Thread.Thread(ThreadGroup,Runnable,String,long) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(ThreadGroup,Runnable,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(Runnable,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(ThreadGroup,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(String) is not applicable
      (actual argument Flughafen cannot be converted to String by method invocation conversion)
    constructor Thread.Thread(ThreadGroup,Runnable) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(Runnable) is not applicable
      (actual argument Flughafen cannot be converted to Runnable by method invocation conversion)
    constructor Thread.Thread() is not applicable
      (actual and formal argument lists differ in length)
Flughafen.java:30:10: error: call to super must be first statement in constructor
    super(title);
         ^
2 errors

Das ist die Fehlermeldung btw. Ich hab
das Thread am anfang initialisiert
Java:
private Thread t = new Thread(this);

und den Befehl
Java:
t.start();
in den Konstruktior geschrieben
 

Kampfzwereg

Bekanntes Mitglied
ja da hab ich wohl nich nachgedacht :-] sry...

aber trotzdem...auch wenn ich das korrigiere spuckt er mir das aus:
Java:
constructor Thread.Thread(ThreadGroup,Runnable,String,long) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(ThreadGroup,Runnable,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(Runnable,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(ThreadGroup,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(String) is not applicable
      (actual argument Flughafen cannot be converted to String by method invocation conversion)
    constructor Thread.Thread(ThreadGroup,Runnable) is not applicable
      (actual and formal argument lists differ in length)
    constructor Thread.Thread(Runnable) is not applicable
      (actual argument Flughafen cannot be converted to Runnable by method invocation conversion)
    constructor Thread.Thread() is not applicable
      (actual and formal argument lists differ in length)

also irgendwas ist nicvht anwendbar. aber warum und wieso? :)
 

HimBromBeere

Top Contributor
Deine Klasse Flughafen muss dazu das Interface Runnable impmenetieren:
Java:
public class Flughafen extends ... implements Runnable {
    public void run() {...}
}
 

darkeye2

Bekanntes Mitglied
ist eigendlich ganz einfach:
(musst halt alles andere noch ergänzen, ist nur der grundrahmen fürs prog)
Java:
public class Flughafen extends JFrame implements Runnable{

 public Flughafen(){
     super("Beispiel Flughafen");
     this.setSize(new Dimension(600,450));
     new Thread(this).start();
 }

 public void run(){
    //bzw ist es eigendlich besser, wenn du statt while(true) for(;;) verwendest, bewirkt das gleiche
   
   while(true){
      //dein code, der die kriese, usw zeichnet
   }
 }

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

}


EDIT: für Dimension musst du was importieren, hab grad leider keine zeit nachzusehen, was genau, aber google sagts schnell (oder die docu) (oder du weißt es, oder verwendest eclipse^^)
 
Zuletzt bearbeitet:

Kampfzwereg

Bekanntes Mitglied
ok also errors kommen schonmal keine mehr :)
ein kleines Problemchen hab ich noch. Ein Ball bewegt sich zwar von links nach rechts , aber nur wenn ich die Maus über den Button im Bild bewege wird der Kreis sichtbar.


Aber warum ist denn for(;; )sinnvoller ? was ist der genaue unterschied? Andere Laufzeit?

WObei ich auch
Java:
this.setSize(new Dimension(600,450));
das weglasse.
 

HimBromBeere

Top Contributor
Aber warum ist denn for(;; )sinnvoller ? was ist der genaue unterschied? Andere Laufzeit?
Wo haste denn das her?!
Code:
for(;;)
ist genau das gleiche wie
Code:
while(true)
, sprich eine Endlosschleife.

EDIT: Habs gefunden... dass das sinnvoller sein soll, halte ich aber für ein Gerücht, lasse mich aber gerne mit logischen Gründen korrigieren...
 
Zuletzt bearbeitet:

darkeye2

Bekanntes Mitglied
wegen while(true) und for(;;):
das ist seit java 1.4 nach dem compilieren das gleiche, aber in allen referenzen wird man für endlosschleifen die for wariante finden, da diese eigendlich eleganter ist, aber das ist hier nur nebensächlich.

Zum problem des TO:
poste doch mal bitte deinen kompletten code, dein button müsste eigendlich nur eine variable auf true setzen, und in deiner game loop prüfst du, ob variable true, wenn ja wird ausgeführt (ball bewegt sich) wenn false wird nicht ausgeführt.

bei deinem button müsste in actionPerformed stehen:
moveBalls = !moveBalls; //einfach den wert der variable moveBalls (type boolean) umdrehen, also beim ersten klick startet die animation und beim zweiten stoppt sie

im game loop:
if(moveBalls){
//code, der deinen ball bewegt
}

in der paintComponent methode:
super.paintComponent(g);
//restelicher code, um deine bälle zu zeichnen
//fals das nicht funktioniert, füge noch ein super.paintComponents(g); hinzu
 

HimBromBeere

Top Contributor
das ist seit java 1.4 nach dem compilieren das gleiche, aber in allen referenzen wird man für endlosschleifen die for wariante finden, da diese eigendlich eleganter ist, aber das ist hier nur nebensächlich.

Eleganter? Naja, Ansichtssache... ich persönlich finde while(true) leichter lesbar als for(;;) (hihi... nichtmal der Texteditor des Forums kann das lesen...), letzteres sieht aus wie ein Sprachfehler, als würde jemand stottern, nur halt ein Programmierer :lol:

Naja, wie auch immer.
Wie mein Vorredner bereits erwähnt hat, musst du bei Button-Klick (actionPerformed) eine boolean-Variable umschalten, am einfachsten natürlich mit
Code:
bRunning = !bRunning
. Diese Variable wird dann in run geprüft, fertig...
 

Kampfzwereg

Bekanntes Mitglied
auf den Trick mit dem Attribut was wechselt bin ich auch gekommen. aber das is ja nicht das Problem. mein Prob ist, dass ich den sich bewegenden Ball nur sehe , wenn ich mit den Cursor über den Buton gehe.
Java:
public class Flughafen extends JFrame implements Runnable {
  // Anfang Attribute

  private boolean ausloeser = false;
  private JButton jButton1 = new JButton();
  private int zaehler=0;
  private Thread t = new Thread(this);

  // Ende Attribute

  public Flughafen(String title) {
    // Frame-Initialisierung
    super(title);
    t.start();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);

    // Anfang Komponenten

    jButton1.setBounds(0, 208, 281, 57);
    jButton1.setText("jButton1");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public  void run()
  {
    while(true)
    {
      repaint();
      zaehler++;
      waiting(100);
    }
  }

  public void paint(Graphics g)
  {
     super.paint(g);

     {
       g.drawOval(zaehler,100,10,10);
     }
  }  
  
  public static void waiting (int n){

        long t0, t1;

        t0 =  System.currentTimeMillis();

        do{
            t1 = System.currentTimeMillis();
        }
        while ((t1 - t0) < (n ));
    }
  public void jButton1_ActionPerformed(ActionEvent evt)
  {

  }

  // Ende Methoden

  public static void main(String[] args)
  {
    new Flughafen("Flughafen");

  }
}
 

darkeye2

Bekanntes Mitglied
also du tust ja eigenldich nix, wenn du auf den button kommst, aber hier mal der (etwas) korigierte code, probier mal, ob das geht:

//du must auf dem button klicken, damit sich der ball bewegtt, beim erneuten anklicken steht er still, und kann wieder mit button gestartet werden

Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Flughafen extends JFrame implements Runnable {
	  // Anfang Attribute
	 
	  private boolean ausloeser = false;
	  private JButton jButton1 = new JButton();
	  private int zaehler=0;
	  private Thread t = new Thread(this);
	 
	  // Ende Attribute
	 
	  public Flughafen(String title) {
	    // Frame-Initialisierung
	    super(title);
	    t.start();
	    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	    int frameWidth = 300;
	    int frameHeight = 300;
	    setSize(frameWidth, frameHeight);
	    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	    int x = (d.width - getSize().width) / 2;
	    int y = (d.height - getSize().height) / 2;
	    setLocation(x, y);
	    Container cp = getContentPane();
	    cp.setLayout(null);
	 
	    // Anfang Komponenten
	 
	    jButton1.setBounds(0, 208, 281, 57);
	    jButton1.setText("jButton1");
	    jButton1.setMargin(new Insets(2, 2, 2, 2));
	    jButton1.addActionListener(new ActionListener() {
	      public void actionPerformed(ActionEvent evt) {
	        jButton1_ActionPerformed(evt);
	      }
	    });
	    cp.add(jButton1);
	    // Ende Komponenten
	 
	    setResizable(false);
	    setVisible(true);
	  }
	 
	  // Anfang Methoden
	  public  void run()
	  {
	    while(true)
	    {
	      this.validate();
	      this.repaint();
	      if(ausloeser)
	        zaehler++;
	      if(zaehler > this.getSize().width) //prüfen ob ball aus dem fenster raus ist
	    	  zaehler = -3;                    //ball auf der anderen seite wieder ins fenster bringen
	      waiting(100);
	    }
	  }
	 
	  public void paint(Graphics g)
	  {
	     super.paint(g);
	 
	     {
	    	 g.drawOval(zaehler,100,10,10);
	     }
	  }  
	  
	  public static void waiting (int n){
	 /*
	        long t0, t1;
	 
	        t0 =  System.currentTimeMillis();
	 
	        do{
	            t1 = System.currentTimeMillis();
	        }
	        while ((t1 - t0) < (n ));
            */
			try {
				Thread.sleep(n);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	    }
	  public void jButton1_ActionPerformed(ActionEvent evt)
	  {
		  ausloeser = !ausloeser;
	  }
	 
	  // Ende Methoden
	 
	  public static void main(String[] args)
	  {
	    new Flughafen("Flughafen");
	 
	  }
	}
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Übrigens: du solltest, wenn du schon Swing nutzt, nicht Paint, sondern paintComponent() überschreiben, damit Java die Möglichkeit, alle anderen Komponenten zu zeichnen...
 

Kenan89

Bekanntes Mitglied
Mal eine Frage: Was für einen Sinn hat es, in Java zu zeichnen? Ich meine z.B. gerade Striche?
Bin Anfänger und habe keine Vorstellung momentan, wozu das in der Praxis nutzvoll sein soll.
 

HimBromBeere

Top Contributor
Hmmmmm... warum könnte man wohl zeichnen wollen? Vlcht. weil im Büro gerade das Papier aus gegangen ist?

Ne, ehlich: wenn du z.B. ein Spiel schreiben willst, bei dem sich ein Strichmännchen bewegt? Oder weil du eine Zeichenanwendung schreiben willst? Warum fragst du, warum Menschen zeuchnen, da kannst du sie auch gleich fragen, warum Programmierer programmieren!
 

darkeye2

Bekanntes Mitglied
@HimBromBeere:
da hast du natürlich recht, hab bei der korrektur seines codes gar nicht drauf geachtet. werde es mal ausbessern

EDIT: kann meinen beitrag von heute frühs nicht mehr editieren ... also muss der TO das wohl selber ausbessern

@Kenan89:
es gibt viele anwendungen, wo du was zeichnen musst, wenn du spiele machst sowieso, wenn du graphische auswertungen von statistiken hast, musst du auch zeichnen, wenn du chemische/ mathematische gleichungen/ formeln darstellst, ist es oft auch nötig lienien usw. zeichnen zu können, ... . Da gibt es sehr sehr viel anwendungsmöglichkeit, ist halt wie in jeder anderen programmiersprache, das ganze graphische zeug wird ja auch gezeichnet!
 

Kenan89

Bekanntes Mitglied
Nein, du hast mich falsch verstanden. In Java kann man doch drawLine einsetzen und eine linie ziehen lassen. Aber das kann man auch in einem Grafik programm machen und das Bild in Java einsetzen.

EDIT: Ah Ok zum Auswerten von Statistiken. Die Grafik zeichnet sich je nach Statistikenlage. Das wäre natürlich sinnvoll ja. Mir sind spontan nur keine Anwendungsbeispiele eingefallen.
 

Kampfzwereg

Bekanntes Mitglied
das ist die Vorstufen von komplexeren Zeichnen. Diese Linie ist später, wenn du gut bist, keine Linie mehr sonder ein animierter Mensch(etc was auch immer)....

@Darkeye2 danke! ich probiers nach der Arbeit mal aus . Die sache war... mein Prob ist nicht , dass der die Methode nicht ausführt wenn ich den buton klicke, sonder wenn ich sie ausführe und mit dem Cursor über den Butten gehe (NICHT KLICKE) man nur dann den sich bewegenden Kreis sieht.
DAS is das eigentliche Prob. hab den button da eig nur so drin bis jetzt. weiß schon, dass der nix macht.

Aber genauere Infos gibts, wenn ich das Prog später mal ausprobiert hab. ;-) danke trotzdem
 

darkeye2

Bekanntes Mitglied
das probleme sollte durch das
this.validate() behoben werden, und du solltest, wie vorhin schon gesagt wurde nicht paint(Graphics g) überschreiben sondern
public void paintComponent(Graphics g){
super.paintComponent(g);
//dein code zum zeichnen
}
 

Kampfzwereg

Bekanntes Mitglied
ok. das mit dem Validate() hab ich wohl übersehen. wie gesagt ich guck in mir erst heute abend richtig an , den Code. Bin dann mal wech. danke trotzdem
lg
 

Kampfzwereg

Bekanntes Mitglied
okay... also ich seh immer noch die Linien von letzten Versuch und krieg die nicht weg. der Kreis bewegt sich aber auch nicht.
hab mir den Quellcode angeguckt. müsste aber eigentlich funktionieren ....
 

Kampfzwereg

Bekanntes Mitglied
ich hab das ganze noch mit paint() . ich änder das m,al gerade. dürfte aber daran nicht liegen

@Darkeye2
und du solltest, wie vorhin schon gesagt wurde nicht paint(Graphics g) überschreiben sondern
public void paintComponent(Graphics g){
super.paintComponent(g);
//dein code zum zeichnen
}

das funzt nicht. muss man dafür irgendwas importieren ? weil er sagt mir immer cannot find symbol....
 
Zuletzt bearbeitet:

darkeye2

Bekanntes Mitglied
also ich weiß nicht, woran das bei dir liegt

probier mal folgenden code:
(einfach komplett kopieren, wenn du mit einem normalen texteditor arbeitest, vergiss nicht, erneut zu kompilieren!!)
(wenn das immer noch nicht geht, bitte mach einen screenshot, damit wir wissen, was genau bei dir schief läuft)
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Flughafen extends JFrame implements Runnable {
	  // Anfang Attribute
	 
	  private boolean ausloeser = false;
	  private JButton jButton1 = new JButton();
	  private JPanel zeichenPanel;
	  private int zaehler=0;
	  private Thread t = new Thread(this);
	 
	  // Ende Attribute
	 
	  public Flughafen(String title) {
	    // Frame-Initialisierung
	    super(title);
	    zeichenPanel = new JPanel(){
	    	public void paintComponent(Graphics g){
	    		super.paintComponent(g);
	    		g.drawOval(zaehler,100,10,10);
	    	}
	    };
	    zeichenPanel.setBounds(0, 0, 300, 300);
	    
	    zeichenPanel.setPreferredSize(new Dimension(300, 300));
	    t.start();
	    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	    int frameWidth = 300;
	    int frameHeight = 300;
	    setSize(frameWidth, frameHeight);
	    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	    int x = (d.width - getSize().width) / 2;
	    int y = (d.height - getSize().height) / 2;
	    setLocation(x, y);
	    Container cp = getContentPane();
	    cp.setLayout(null);
	    cp.add(zeichenPanel);
	 
	    // Anfang Komponenten
	 
	    jButton1.setBounds(0, 208, 281, 57);
	    jButton1.setText("jButton1");
	    jButton1.setMargin(new Insets(2, 2, 2, 2));
	    jButton1.addActionListener(new ActionListener() {
	      public void actionPerformed(ActionEvent evt) {
	        jButton1_ActionPerformed(evt);
	      }
	    });
	    zeichenPanel.add(jButton1);
	    // Ende Komponenten
	 
	    setResizable(false);
	    setVisible(true);
	  }
	 
	  // Anfang Methoden
	  public  void run()
	  {
	    while(true)
	    {
	      this.validate();
	      this.repaint();
	      if(ausloeser)
	        zaehler++;
	      if(zaehler > this.getSize().width)
	    	  zaehler = -3;
	      waiting(100);
	    }
	  } 
	  
	  public static void waiting (int n){
	   /*
	        long t0, t1;
	 
	        t0 =  System.currentTimeMillis();
	 
	        do{
	            t1 = System.currentTimeMillis();
	        }
	        while ((t1 - t0) < (n ));
	        */
			try {
				Thread.sleep(n);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	    }
	  public void jButton1_ActionPerformed(ActionEvent evt)
	  {
		  ausloeser = !ausloeser;
	  }
	 
	  // Ende Methoden
	 
	  public static void main(String[] args)
	  {
	    new Flughafen("Flughafen");
	 
	  }
	}
 

Kampfzwereg

Bekanntes Mitglied
ich habs jetzt nochmal probiert. funzt auch alles. nur eine Sache nich. glaub da hab ich nen Fehler beim Type Cast gemacht. Kannste dir mal angucken.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 15.01.2012
  * @author
  */
public class Flughafen extends JFrame implements Runnable {
  // Anfang Attribute
  private Thread t = new Thread(this);
  private BufferedImage imgHintergrund = null;
  private JLabel jLzeit = new JLabel();
  private BufferedImage imgFlugzeug = null;
  private boolean besetzt= false;
  private QueueNEU schlange = new QueueNEU();
  private JButton jBplus = new JButton();
  private int FlugzeugeZuErstellen=0;
  // Ende Attribute
  public Flughafen(String title) {
    // Frame-Initialisierung
    super(title);
    t.start();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 480;
    int frameHeight = 320;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    jLzeit.setBounds(112, 200, 46, 24);
    jLzeit.setText("Zeit:");
    jLzeit.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
    cp.add(jLzeit);
    jBplus.setBounds(64, 224, 129, 33);
    jBplus.setText("Flugzeug hinzufügen");
    jBplus.setMargin(new Insets(2, 2, 2, 2));
    jBplus.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jBplus_ActionPerformed(evt);
      }
    });
    cp.add(jBplus);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public  void run()
  {
    while(true)
    {
       try
       {
       imgFlugzeug = ImageIO.read(new File("img/flugzeugneu2.png"));
       imgHintergrund = ImageIO.read(new File("img/hintergrund.jpg"));
       }
       catch(IOException e)
       {

       }
       repaint();
       if(FlugzeugeZuErstellen>0)
       {
          schlange.enqueue(new Flugzeug(1+(int)(Math.random()*1),0));
          FlugzeugeZuErstellen--;
       }

       if(((Flugzeug)schlange.front()).getPos()<480)
       {
          if(!besetzt)
          {
            if(((Flugzeug)schlange.front()).getPos()<400)
            {
               ((Flugzeug)schlange.front()).setPos(((Flugzeug)schlange.front()).getPos()+1);
            }
            else
            {
               ((Flugzeug)schlange.front()).setZeitZaehler(((Flugzeug)schlange.front()).getZeitZaehler()+1);
            }

          }
          else
          {
            if(((Flugzeug)schlange.front()).getPos()<400)
            {
              ((Flugzeug)schlange.front()).setPos(((Flugzeug)schlange.front()).getPos()+1);
            }
          }
       }
       else
       {
         schlange.dequeue();
       }


       this.waiting(10);
    }
  }


  public void paint(Graphics g)
  {
     super.paint(g);
     {
       g.drawImage(imgHintergrund,0,0,this);
       g.drawImage(imgFlugzeug,((Flugzeug)schlange.front().getNext().getPos()),155,this);
       g.drawImage(imgFlugzeug,((Flugzeug)schlange.front().getNext().getPos()),155,this);
     }

  }
  
  public static void waiting (int n)
  {

        long t0, t1;

        t0 =  System.currentTimeMillis();

        do{
            t1 = System.currentTimeMillis();
        }
        while ((t1 - t0) < (n)*1000);
   }

  public void jBplus_ActionPerformed(ActionEvent evt)
  {

  }

  // Ende Methoden

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

darkeye2

Bekanntes Mitglied
also, erstens wäre es vom vorteil wenn du verraten würdest, was genau du machen willst, und das passierte, und was eben nicht funktioniert. falls es eine fehlermeldung gibt, diese bitte auch posten.

dann:

1.)
dass
Java:
 public static void waiting (int n)
  {
 
        long t0, t1;
 
        t0 =  System.currentTimeMillis();
 
        do{
            t1 = System.currentTimeMillis();
        }
        while ((t1 - t0) < (n)*1000);
   }

solltest du unbedingt durch folgendes ersetzen, da deine methode sehr ineffectiev und cpu lastig ist!!
Java:
public static void waiting (int n){
			try {
				Thread.sleep(n);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	    }

2.)
du solltest alles auf einem JPanel zeichnen, und nicht auf das frame selbst! also nicht die paint methode des frames ersetzen, sondern ein jpanel erstellen, und da die paintComponent methode überschrieben, wie das geht, siehst du in meinen vorherigen post.

3.)
du lädst im moment in jedem game loop die bielder neu, das ist völlig sinnlos und schlecht für die performance, die bilder sollten einbalig ganz am anfang beim initialisieren geladen werden

[TIPP]außerdem bitte auch deine klasse queueNEU posten[/TIPP]
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
A Konsolenausgabe verschiebt sich Java Basics - Anfänger-Themen 8
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
H 36 Zufallszahlen die sich nicht wiederholen Java Basics - Anfänger-Themen 27
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
H Punkt bewegt sich auf einer Ellipse Java Basics - Anfänger-Themen 6
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
K Sysout wiederholt sich Java Basics - Anfänger-Themen 6
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
T Schleife fährt sich fest Java Basics - Anfänger-Themen 14
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
ZotacZ Best Practice Lohnt es sich in GWT einzuarbeiten? Java Basics - Anfänger-Themen 4
E Pdf-Document lässt sich im Servlet nicht öffnen Java Basics - Anfänger-Themen 5
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
S String ändert sich nicht Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
P Compiler-Fehler Wo befindet sich hier der Fehler und warum? Java Basics - Anfänger-Themen 21
F MouseMotionListener - Objekt bewegt sich nicht Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
G Was hat es mit java.net.* auf sich? Java Basics - Anfänger-Themen 10
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
OlafHD Java Uhrzeit aktualisiert sich nicht Java Basics - Anfänger-Themen 2
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
W OOP Zwei Objekte beziehen sich aufeinander (Zirkelbezug)? Java Basics - Anfänger-Themen 4
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
S Variable (int) erhöht sich nicht richtig Java Basics - Anfänger-Themen 18
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
Fishmeaker Methoden mit Methoden aufrufen - Programm hängt sich auf Java Basics - Anfänger-Themen 5
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
T Methoden [GELÖST ]Warum ruft sich die Methode von alleine auf? Java Basics - Anfänger-Themen 3
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
Lord.Djerun (Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf.. Java Basics - Anfänger-Themen 8
P Programm lässt sich nicht starten - Klasse mit Hauptmethode nicht gefunden Java Basics - Anfänger-Themen 9
B Compiler-Fehler [Lejos] [RCX] Programm lässt sich nicht kompilieren Java Basics - Anfänger-Themen 5
N Variablen Array-Variable verändert sich Java Basics - Anfänger-Themen 12
HoloYoitsu BufferedReader verhält sich seltsam Java Basics - Anfänger-Themen 10
S Programm verhält sich in Eclipse anders, als ein eigenständiges Programm Java Basics - Anfänger-Themen 5
N Von Kopf bis Fuss TestArrays lässt sich nicht lösen Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
T GUI öffnet sich nicht Java Basics - Anfänger-Themen 23
G Java lässt sich nicht installieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben