Verzögerung des Erscheinens der Bilder

Der_Falke_

Mitglied
Hallo liebe Community,
ich möchte in meinem Programm einige Bilder wie eine Präsentation ablaufen lassen. D.h. erst mal soll das erste Bild eingeblendet werden, nach 2 Sekunden das 2. Bild dazu, nach weiteren 2 Sekunden ein 3. Bild dazu, etc.
Ich habe es bereits mit der Funktion Thread.sleep(x); probiert, doch dadurch wartet das Programm erst die komplette Zeit ab und lässt dann alle Bilder die in der Zeit gesetzt worden sind erscheinen.

Wie kann ich die Bilder nach einander einblenden?

[Java]
public static void vorgeschichte(JFrame frame) {
JPanel panelVG = new JPanel();

panelVG.setLayout(null);
panelVG.setBounds(0, 0, 1400, 800);

JLabel background1 = new JLabel(new ImageIcon(Frame.class.getResource("/Images/backgroundVG1.png")));
background1.setBounds(0, 0, 1400, 800);
JLabel text1 = new JLabel(new ImageIcon(Frame.class.getResource("/Images/textVG1.png")));
text1.setBounds(50, 650, 400, 40);

panelVG.add(text1);
panelVG.add(background1);

frame.add(panelVG);
panelVG.setVisible(true);

//Thread.sleep(2000);
// Neues Bild
//Thread.sleep(2000);
// Neues Bild
}
[/Java]
 
Du könntest es mit einer zeitgestützten Animation versuchen. Der Steuerthread guckt z. B. alle 50 Millisekunden nach, ob ein Bild gesetzt wurde. Ist dies der Fall startet er eine zeitgestützte Animation zum Einblenden des Bildes. ("Nach 100 Millisekunden ist das Bild zu 10% eingeblendet.") Wird in der Zeit noch eines gesetzt, so kommt es in eine Warteschlange und wird erst angefasst, wenn die Anmination beendet ist.
 
Könntest du ein Codebeispiel zeigen?
Ich kann mir zwar UNGEFÄHR vorstellen was du meinst, allerdings habe ich keine Ahnung wie ich das machen könnte und ich möchte das ganze noch an einem Beispielcode nachvollziehen können.

Wäre nett 🙂
 
Ich könnte dir Pseudocode geben:

Java:
class Steuerthread extends Thread implements Runnable{
  Schlange schlang = new Schlange();

  public void run(){
    while (!isInterrupted()){
      if (schlang.neuesBildDa()){
        starteÜberblendung();
      } else {
        tuNix();
      }
    }
  }

  void neuesBildDa(Bild bld){
    schlang.fügeBildHinzu(bld);
  }
  
  void starteÜberblendung(){
    erstelleÜberblendungsThread();
  }
}

Ist es so verständlicher?

Du müsstest damit aber noch einbauen, dass der Steuerthread wartet, bis der Überblendungsthread mit Überblenden fertig ist.
 
Mmmmh... tut mir leid ^^"
Ich verstehe durchaus einiges, aber nicht genug das ich es bewusst anwenden könnte.... Ich habe noch einmal ein wenig rumexperimentiert und nachgeforscht und habe jetzt eine andere Lösung gefunden. Ich erstelle die Bilder außerhalb meines Fensters und lasse sie dann reinschieben. Diese Variante finde ich noch ein wenig einfacher:

[Java]
public class Vorgeschichte {

static int position = 780;


public static void vorgeschichte(JFrame frame) {
JPanel panelVG = new JPanel();

panelVG.setLayout(null);
panelVG.setBounds(0, 0, 1400, 800);

JLabel background1 = new JLabel(new ImageIcon(Frame.class.getResource("/Images/backgroundVG1.png")));
background1.setBounds(0, 0, 1400, 800);
JLabel text1 = new JLabel(new ImageIcon(Frame.class.getResource("/Images/textVG1.png")));
text1.setBounds(50, position, 400, 40);

Timer t = new Timer(50, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(position > 0) {
text1.setBounds(50, position, 400, 40);
panelVG.add(text1);
panelVG.add(background1);
frame.add(panelVG);
position = position-1;
}
}
});
panelVG.add(text1);
panelVG.add(background1);
frame.add(panelVG);
t.setInitialDelay(0);
t.setRepeats(true);
t.start();

frame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
t.stop();
}
});
}




}
[/Java]
 

Neue Themen


Zurück
Oben