Hallo,
ich sitze nun schon seit ca. 2 Tagen an dem Problem und habe auch schon etliches gegoogelt.
Ich wollte ein einfaches .png in bestimmten zeitlichen Abständen, an zufälligen Orten erscheinen und verschwinden lassen. Zudem sollen sich die Objekte noch im Raum bewegen.
Momentan sieht es so aus für ein einmaliges erzeugen des Images mit Bewegung.
Die main startet mein ersten Fenster:
Die CellPanel()- Klasse habe ich im Netz gefunden und sieht macht schon mal das was sie soll:
Jetzt weiß ich leider nicht weiter. Ich hatte schon probiert in der
Methode, das Objekt nach bestimmter Zeit mehrmalig aufzurufen, aber dann zeichnet er nichts mehr. Meine Überlegung war die Objekte in eine ArrayList zu schieben und in eine zweite Liste die zugehörigen aktuellen Koordinaten zu speichern. Dazu hatte ich auch schon was geschrieben:
Ich bin dankbar für jede Anregungen und jeden Verweis.
ich sitze nun schon seit ca. 2 Tagen an dem Problem und habe auch schon etliches gegoogelt.
Ich wollte ein einfaches .png in bestimmten zeitlichen Abständen, an zufälligen Orten erscheinen und verschwinden lassen. Zudem sollen sich die Objekte noch im Raum bewegen.
Momentan sieht es so aus für ein einmaliges erzeugen des Images mit Bewegung.
Die main startet mein ersten Fenster:
Java:
package gui;
import graphic.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.*;
public class MainFrame extends WindowFrame{
private static final long serialVersionUID = 1L;
public MainFrame(String name) {
setTitle(name);
initFrame();
setVisible(true);
}
@Override
public void initFrame(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int frameWidth = d.width/2;
int frameHeight = d.height/2;
setSize(frameWidth, frameHeight);
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new CellPanel());
}
}
Die CellPanel()- Klasse habe ich im Netz gefunden und sieht macht schon mal das was sie soll:
Java:
package gui;
import graphic.LactoseGraphic;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class CellPanel extends JPanel implements Runnable {
private static final long serialVersionUID = -4203458676349686984L;
Image lactose;
Thread animator;
int x, y;
private final int DELAY = 50;
public CellPanel() {
setBackground(Color.WHITE);
setDoubleBuffered(true);
ImageIcon ii =
new ImageIcon(this.getClass().getResource("/images/lactose.png"));
lactose = ii.getImage();
x = y = 10;
}
public void addNotify() {
super.addNotify();
animator = new Thread(this);
animator.start();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(lactose, x, y, this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void cycle() {
x += 1;
y += 1;
if (y > 240) {
y = 10;
x = 10;
}
}
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while (true) {
cycle();
repaint();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
}
}
Jetzt weiß ich leider nicht weiter. Ich hatte schon probiert in der
Code:
paint(Graphics g)
Java:
Graphics2D g2d;
ArrayList<Graphics2D> list = new ArrayList<Graphics2D>();
for(int i = 0; i < times;i++) {
g2d = (Graphics2D)g;
list.add(g2d);
}
for (int i = 0; i <list.size();i++) {
list.get(i).drawImage(lactose, x, y, this);
}
Ich bin dankbar für jede Anregungen und jeden Verweis.