Bild wird immer neu gemalt

Status
Nicht offen für weitere Antworten.

Exterminas

Mitglied
hi alle zusammen,

ich möchte in meinem "programm" eine zufallszahl zwischen 1 und 15 erstellen und diese dann an hand eines bildes darstellen. es funktioniert alles nur werden in zufälliger reinfolge immer neue bilder gemalt irgendwann hört es dann auf und wenn ich meinen button drücke der dann eine neue zahl und ein neues bild machen soll dann geht es wieder von vorne los und es werden wieder mehrere bilder hintereinander gemalt.

code des applets:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Orakel extends Applet implements ActionListener
{
  MSSOrakel o;
  Button neu;

  public void init()
  {
      this.setLayout(null);
      this.setBackground(Color.black);
      neu = new Button("Vorhersagen");
      neu.setBounds(130,20,70,20);
      add(neu);
      neu.addActionListener(this);
      o = new MSSOrakel(this);
  }

  public void paint(Graphics s)
  {
      o.Vorhersage();
      o.BildMalen();
  }
  
  public void actionPerformed(ActionEvent e)
  {   
      o.Vorhersage();
      o.BildMalen();
  }
}

code der klasse:

Code:
import java.awt.Graphics;
import java.awt.Image;
import java.applet.Applet;
import java.lang.Math;

public class MSSOrakel extends Wuerfel
{
    protected Graphics stift;
    protected Image img;
    protected Applet Orakel;
    protected int augenzahl;
    
    public MSSOrakel(Applet a)
    {
        Orakel = a;
        stift = Orakel.getGraphics();
        augenzahl = 0;
    }
    
    public void Vorhersage()
    {
        augenzahl = (int) (Math.random() * 15) + 1;
    }
    
    public void BildMalen()
    {        
        if(augenzahl==1)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/1.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==2)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/2.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==3)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/3.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==4)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/4.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==5)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/5.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==6)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/6.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==7)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/7.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==8)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/8.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==9)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/9.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==10)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/10.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==11)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/11.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==12)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/12.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==13)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/13.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==14)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/14.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
        if(augenzahl==15)
        {
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/15.jpg");
            stift.drawImage(img,0,0,Orakel);
        }
    }
}

ich hoffe ihr könnt mir helfen schon mal danke im vorraus

mfg
Exterminas
 
S

SlaterB

Gast
ich weiß es nicht genau, vermute aber, dass
stift.drawImage(img,0,0,Orakel);
ein repaint des Applets auslöst welches wieder zum nächsten Bild führt usw.

----------
mit
irgendeine-java-Grafikkomponente.getGraphics();
geht alles schief, was Anfänger sich so ausdenken,
verwende NIEMALS getGraphics()

stattdessen etwa so:

Code:
public void paint(Graphics s) 
  { 
      o.Vorhersage(); 
      o.BildMalen(g); 
  } 
  
  public void actionPerformed(ActionEvent e) 
  {    
      repaint();
  }





+



public void BildMalen(Graphics g) 
    {        
        if(augenzahl==1) 
        { 
            img = Orakel.getImage(Orakel.getCodeBase(),"Bilder/1.jpg"); 
            g.drawImage(img,0,0,Orakel); 
        } 
....
}

---------

allgemeiner Tipp:
lade die Bilder anfangs in ein Image-Array und zeige die Bilder aus dem Array an statt sie immer wieder zu laden,

netter Nebeneffekt: du brauchst auch keine 15 if mehr,
mit Arrays geht alles leichter, Array-Index 0-14

wenn du dich mit Arrays noch gar nicht auskennst, was ich jetzt bei diesen 15 ifs vermute,
dann vielleicht auf die Schnelle zu schwer,
muss nicht unbedingt sein
 

Exterminas

Mitglied
danke für die verbesserung und den tip mit den arrays ich guck mir das mal an aber das problem ist nicht behoben das bild zeichnet sich immer noch neu.
 
S

SlaterB

Gast
vielleicht wird das repaint aus einem anderen Grund öfters ausgeführt (Browser oder so),
dann wähle in der actionPerformed einmal zufällig ein Bild aus
und in repaint zeichest du immer das gleiche (aktuell ausgewählte) Bild
 
G

Guest

Gast
also noch mal danke für die hilfe ich hab die lösung jetzt endlich gefunden. das problem muss dadurch entstanden sein dass ich die zufallszahl auf 0 gesetzt hab und dann beim starten des applets gleich eine zufallszahl generieren lies. ich hab der zufallszahl jetzt einen zufälligen startwert gegeben und eine neue zahl erst durch drücken des knopfes zuweisen lassen. jetzt funktioniert es auch und das bild wird nur einmal geladen.
hier noch mal der funktionierende quelltext:

meine klasse:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.applet.Applet;
import java.lang.Math;

public class MSSOrakel extends Wuerfel
{
    protected Graphics stift;
    protected Image img;
    protected Applet Orakel;
    protected Image picArray[] = new Image[15];
    
    public MSSOrakel(Applet a)
    {
        Orakel = a;
        augenzahl = (int) (Math.random() * 15) + 1;
        picArray[0] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/1.jpg");
        picArray[1] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/2.jpg");
        picArray[2] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/3.jpg");
        picArray[3] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/4.jpg");
        picArray[4] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/5.jpg");
        picArray[5] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/6.jpg");
        picArray[6] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/7.jpg");
        picArray[7] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/8.jpg");
        picArray[8] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/9.jpg");
        picArray[9] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/10.jpg");
        picArray[10] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/11.jpg");
        picArray[11] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/12.jpg");
        picArray[12] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/13.jpg");
        picArray[13] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/14.jpg");
        picArray[14] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/15.jpg");
    }
    
    public void Vorhersage()
    {
        augenzahl = (int) (Math.random() * 15) + 1;
    }
    
    public void BildMalen(Graphics g)
    {        
        if(augenzahl==1)
        {
            g.drawImage(picArray[0],1,1,Orakel);
        }
        if(augenzahl==2)
        {
            g.drawImage(picArray[1],1,1,Orakel);
        }
        if(augenzahl==3)
        {
            g.drawImage(picArray[2],1,1,Orakel);
        }
        if(augenzahl==4)
        {
            g.drawImage(picArray[3],1,1,Orakel);
        }
        if(augenzahl==5)
        {
            g.drawImage(picArray[4],1,1,Orakel);
        }
        if(augenzahl==6)
        {
            g.drawImage(picArray[5],1,1,Orakel);
        }
        if(augenzahl==7)
        {
            g.drawImage(picArray[6],1,1,Orakel);
        }
        if(augenzahl==8)
        {
            g.drawImage(picArray[7],1,1,Orakel);
        }
        if(augenzahl==9)
        {
            g.drawImage(picArray[8],1,1,Orakel);
        }
        if(augenzahl==10)
        {
            g.drawImage(picArray[9],1,1,Orakel);
        }
        if(augenzahl==11)
        {
            g.drawImage(picArray[10],1,1,Orakel);
        }
        if(augenzahl==12)
        {
            g.drawImage(picArray[11],1,1,Orakel);
        }
        if(augenzahl==13)
        {
            g.drawImage(picArray[12],1,1,Orakel);
        }
        if(augenzahl==14)
        {
            g.drawImage(picArray[13],1,1,Orakel);
        }
        if(augenzahl==15)
        {
            g.drawImage(picArray[14],1,1,Orakel);
        }
    }
}
und hier das applet:
Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Orakel extends Applet implements ActionListener
{
  MSSOrakel o;
  Button neu;

  public void init()
  {
      this.setLayout(null);
      this.setBackground(Color.black);
      neu = new Button("Vorhersagen");
      neu.setBounds(130,20,70,20);
      add(neu);
      neu.addActionListener(this);
      o = new MSSOrakel(this);
  }

  public void paint(Graphics g)
  {
      o.BildMalen(g);
  }
  
  public void actionPerformed(ActionEvent e)
  {   
      o.Vorhersage();
      repaint();
  }
}

es war die rede von einem array. so schwer wars eigentlich gar nicht ich fands eigentlich recht simpel war es ungefär das was du meintest??
 
S

SlaterB

Gast
Anonymous hat gesagt.:
picArray[0] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/1.jpg");
picArray[1] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/2.jpg");
picArray[2] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/3.jpg");
picArray[3] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/4.jpg");
picArray[4] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/5.jpg");
picArray[5] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/6.jpg");
picArray[6] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/7.jpg");
picArray[7] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/8.jpg");
picArray[8] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/9.jpg");
picArray[9] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/10.jpg");
picArray[10] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/11.jpg");
picArray[11] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/12.jpg");
picArray[12] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/13.jpg");
picArray[13] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/14.jpg");
picArray[14] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/15.jpg");
->
Code:
static int MAX = 15;


for (int i=0; i< MAX; i++) {
   picArray[i] = Orakel.getImage(Orakel.getCodeBase(),"Bilder/"+(i+1)+".jpg");
}

-----------

if(augenzahl==1)
{
g.drawImage(picArray[0],1,1,Orakel);
}
if(augenzahl==2)
{
g.drawImage(picArray[1],1,1,Orakel);
}
if(augenzahl==3)
{
g.drawImage(picArray[2],1,1,Orakel);
}
....

->

Code:
    g.drawImage(picArray[augenzahl-1],1,1,Orakel);
 

Exterminas

Mitglied
so letzte frage:
was bringt das i++??
ich weiß das wenn ich das schreib die variable +1 gerechnet wird und das ohne das i++ das applet nicht funktioniert aber was es jetzt bringt weiß ich nich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
M Bild in JFrame wird nicht angezeigt Java Basics - Anfänger-Themen 6
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
E Pfad zu einem gif-Bild wird zur Laufzeit nicht gefunden Java Basics - Anfänger-Themen 5
C Bild wird nicht mehr gefunden Java Basics - Anfänger-Themen 2
S Bild wird auf Canvas nicht angezeigt Java Basics - Anfänger-Themen 8
J gif Bild wird nicht dargestellt Java Basics - Anfänger-Themen 8
G Bild wird im falschen Frame angezeigt Java Basics - Anfänger-Themen 5
A warum wird das bild nicht angezeigt? Java Basics - Anfänger-Themen 4
G Bild wird nicht neu gezeichnet - finde den Fehler nicht Java Basics - Anfänger-Themen 3
S Bild wird bei Start nich angezeigt Java Basics - Anfänger-Themen 2
B Panel mit Bild wird nicht angzeigt Java Basics - Anfänger-Themen 16
C Bild wird nicht gezeichnet Java Basics - Anfänger-Themen 3
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben