Bildproblem

S

shiroto

Gast
Moin moin.
Ich wusste nich so richtig wonach ich suchen soll, deswegen kann es sein, dass die Frage schonmal gestellt wurde xD
Ich möchte ein Bild über den Bildschirm laufen lassen (von oben nach unten) und der Teil, der unten aus dem Bild läuft soll oben wieder reinkommen(das ganze soll möglichst nahtlos aneinanderhänge, quasi ne endlosschleife..). Ich hab das schonmal irgendwo gesehn aber ich kann mich nich mehr erinnern wie der das gemacht hat xD
Irgendwelche konstruktiven Vorschläge?
 
S

shiroto

Gast
achso vlt sollt ich noch erwähnen: ich benutze nen JFrame und pack das alles of den container, der dann nur mit
Java:
 public void paintComponents(Graphics g) {
    super.paintComponents(g);
  }
gezeichnet wird. objekte werden dementsprechend alle nur mit setBounds() an ihren platz gesetzt...
 

Ein Keks

Bekanntes Mitglied
vom prinzip her musste das bild nach unten verschieben und den "abgeschnittenen" Teil mit getSubimage wieder oben hinmalen

edit: grad zusammengeschustert nicht getestet:
Java:
BufferedImage img = ...;
BufferedImage downImg;
BufferedImage upImg;
int width = container.getWidth();
int height= container.getHeight();

private void update(){
  y = (y+scrollSpeed) % height;
  downImg = img.getSubImage(0, 0, width, height-y);
  upImg = img.getSubImage(0, height-y, width, height);
}

private void renderBackground(Graphics g){
  g.drawImage(upImg, 0, 0, null);
  g.drawImage(downImg, 0, y, null);
}
 
Zuletzt bearbeitet:
S

shiroto

Gast
"Was ich bisher habe"...nichts.
Ich hab nen JFrame, dazugehörigen Container und nen JLabel mit bild auf dem Container.
 
S

shiroto

Gast
getSubimage ist aber ne Methoder von BufferedImage. auf nem JLabel kann ich aber nur ImageIcons anzeigen, oder lieg ich da falsch?
 
T

Tomate_Salat

Gast
Nun ja, wüsste jetzt nicht wie ich da helfen kann, außer es dir zu Schreiben, aber dafür hab ich weder zeit noch lust :p

also die Animation würde ich mit einem Thread oder SwingWorker realisieren. Da würde ich eine Pause von etwa 10millisekunden einbauen und dann konstant die position ändern. Da ich mit Bilder noch nciht gearbeitet habe, verweise ich mal auf Kekses Eintrag.

Also, vllt programmierste erstmal einen Ansatz und versucht es erst selbst einmal, sollten Fragen/Probleme auftauchen, bist du hier natürlich herzlich willkommen die zu stellen ;-)

Edit

getSubimage ist aber ne Methoder von BufferedImage. auf nem JLabel kann ich aber nur ImageIcons anzeigen, oder lieg ich da falsch?

Ne da liegst du richtig. Aber ob hier JLabel der richtige Container für das Bild ist, wage ich zu bezweifeln

Mit freundlichen Grüßen

Tomate_Salat
 
S

shiroto

Gast
Meine Güte, wenn ich ne Idee hätte würd ich nich fragen.
Es soll so aussehen:

Java:
import ***

public class MeineKlasse extends JFrame implements Runnable {
  Container cp;
  JLabel meinLabel;
  int y;
  Thread meinThread;

  public void init() {
    cp = getContentPane();
    **frame initialisieren**
    meinLabel = new JLabel(**hol dir ein bild**);
    cp.add(meinLabel);
    meinThread = new Thread(this);
    meinThread.start();
  }

  public void run() {
    while(...) {
      meinLabel.setBounds(0, y++, breite, höhe);

      try {
        Thread.sleep....
      }
    }
  }

  public void paintComponents(Graphics g) {
    super.paintComponents(g);
  }
}

damit verschwindet damit würde das label langsam nach unten hin verschwinden. jetzt möcht ich den teil der unten verschwindet oben wieder hinzeichnen.
Problem: ich bin im container und kann nur dinge zeichnen die ich dem container hinzufügen kann(also subclasses von JComponent). bei denen ich aber keine klasse gefunden habe die mir das irgendwie erleichtern würde.
theoretisch könnte man das bild als bufferedimage laden, teilen, andersrum zusammenfügen, zum imageicon konvertiern, in ein jlabel laden und dem container hinzufügen. und das müsste er bei jedem durchlauf von run() wieder machen...aber bevor ich sowas programmiere verzichte ich lieber auf das feature oO ist erstens zu viel code und frisst mir zweitens zu viele ressourcen.

ich hoffe ich hab mein problem diesmal besser geschildert. und hoffe natürlich auf ideen.
 

Michael...

Top Contributor
Versuchs doch erstmal mit einem selbstgezeichneten Rechteck o.ä.:
Java:
import java.awt.Color;
import java.awt.Graphics;

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

public class WalkingPic extends JFrame implements Runnable {
	private AniPanel aniPanel;
	private int x;

	public WalkingPic() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(0, 0, 300, 300);
		this.setLocationRelativeTo(null);
		x = 0;
		aniPanel = new AniPanel();
		this.getContentPane().add(aniPanel);
		new Thread(this).start();
	}

	public void run() {
		while (true) {
			x++;
			aniPanel.repaint();
			try {
				Thread.sleep(5);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	class AniPanel extends JPanel {

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			int w = this.getWidth();
			int x2 = w;
			g.setColor(Color.RED);
			g.fillRect(x, 50, 100, 100);
			if (x > w - 100)
				x2 = x - w;
			g.fillRect(x2, 50, 100, 100);
			if (x > w)
				x = 0;
		}
	}

	public static void main(String[] args) {
		new WalkingPic().setVisible(true);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Bildproblem Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben