Hallo zusammen,
vor knapp 2 Wochen habe ich bereits hier mit etwas Hilfe das Programm hinbekommen, welches ich nun erweitern muss.
Es sollen Buttons über, links und rechts von dem Applet sein, die beim anklicken den entsprechenden Thread anhalten und bei erneutem klicken wieder weiterlaufen lassen.
Kurze erklärung zum bisherigen Applet:
4 Bilder laufen als Animation
- von oben nach unten
- von links nach rechts
- von links oben nach rechts unten
- von rechts oben nach links unten
Dies hatte auch funktioniert, allerdings mit nur einem Thread.
Wir sollen mit suspend() und resume() arbeiten.
Nun erstelle ich erstmal für jedes Bild einen eigenen Thread. Dies scheint schonmal nicht zu funktionieren.
Desweiteren versuche ich mit einem Layoutmanager die buttons entsprechend zu positionieren. Die obere Leiste ist schonmal vorhanden, allerdings wird dann im eigentlichen Appletbereich (Center) kein Bild mehr angezeigt im Moment.
Habe es mal folgendermaßen versucht:
Vielen Dank für Tipps
vor knapp 2 Wochen habe ich bereits hier mit etwas Hilfe das Programm hinbekommen, welches ich nun erweitern muss.
Es sollen Buttons über, links und rechts von dem Applet sein, die beim anklicken den entsprechenden Thread anhalten und bei erneutem klicken wieder weiterlaufen lassen.
Kurze erklärung zum bisherigen Applet:
4 Bilder laufen als Animation
- von oben nach unten
- von links nach rechts
- von links oben nach rechts unten
- von rechts oben nach links unten
Dies hatte auch funktioniert, allerdings mit nur einem Thread.
Wir sollen mit suspend() und resume() arbeiten.
Nun erstelle ich erstmal für jedes Bild einen eigenen Thread. Dies scheint schonmal nicht zu funktionieren.
Desweiteren versuche ich mit einem Layoutmanager die buttons entsprechend zu positionieren. Die obere Leiste ist schonmal vorhanden, allerdings wird dann im eigentlichen Appletbereich (Center) kein Bild mehr angezeigt im Moment.
Habe es mal folgendermaßen versucht:
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class Animation extends JApplet {
/**
*
*/
private static final long serialVersionUID = 1L;
Button north;
int index = 0;
public void init() {
this.setSize(800, 600);
Panel panel = new Panel(new FlowLayout(FlowLayout.CENTER, 50, 10));
north = new Button();
north.setBackground(Color.RED);
north.setLabel("STOP !");
TextField northText = new TextField();
northText.setText("MITTE");
northText.setEditable(false);
panel.add(northText);
panel.add(north);
Panel jC = new Panel();
jC.setLayout(null);
int i;
Bilder[] b = new Bilder[4];
getContentPane().setLayout(null);
MediaTracker tracker = new MediaTracker(this);
b[0]=new Bilder(-100,-150,"new-1.gif",((double) this.getSize().width+100)/((double) this.getSize().height+150),1);
b[1]=new Bilder(this.getSize().width,-150,"new-2.gif",-((double) this.getSize().width+100)/((double) this.getSize().height+150),1);
b[2]=new Bilder(this.getSize().width/2-50,-150,"new-4.gif",0,1);
b[3]=new Bilder(-100,this.getSize().height/2-100,"new-3.gif",3,0);
Malen m1 = new Malen(b[0]);
Malen m2 = new Malen(b[1]);
Malen m3 = new Malen(b[2]);
Malen m4 = new Malen(b[3]);
m1.setBounds(new Rectangle(0,0,0,0));
m2.setBounds(new Rectangle(0,0,0,0));
m3.setBounds(new Rectangle(0,0,0,0));
m4.setBounds(new Rectangle(0,0,0,0));
for(i=0; i<b.length;i++)
{
tracker.addImage(b[i].img, i);
try
{
tracker.waitForID(i);
}
catch(InterruptedException e) {}
}
if (tracker.statusID(b.length-1, true) == MediaTracker.COMPLETE)
setLayout(new BorderLayout());
jC.add(m1);
jC.add(m2);
jC.add(m3);
jC.add(m4);
add("North", panel);
add("Center", jC);
}
public class Malen extends JComponent implements Runnable{
Thread[] t = new Thread[4];
Thread thread;
private List<Bilder> picList =
Collections.synchronizedList(new ArrayList<Bilder>());
Bilder[] bilder = new Bilder[4];
Bilder[] b = new Bilder[4];
Image m_ImgBuffer;
public Malen(Bilder bild){
t[index] = new Thread(this);
t[index].start();
addPicture(bild);
index++;
}
public void addPicture(Bilder bild)
{
picList.add(bild);
b[index] = bild;
}
public void paint(Graphics g){
if(this.b[3].x == this.getSize().width)
{
this.b[3].runs += 1;
}
if((this.b[3].runs % 2) == 1)
{
g.setColor(Color.orange);
g.fillRect(0,0,this.getSize().width,this.getSize().height);
} else {
g.setColor(Color.green);
g.fillRect(0,0,this.getSize().width,this.getSize().height);
}
for (Bilder b : picList)
{
g.drawImage(b.img, (int)b.x,(int)b.y,this);
}
}
public final void suspend(){
b[0].xVer = 0;
b[0].yVer = 0;
}
public void run(){
int h,w;
north.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Thread.currentThread().suspend();
}
}
);
h = getContentPane().getSize().height;
w = getContentPane().getSize().width;
//b[0].xVer = ((double) getContentPane().getSize().width+100)/((double) getContentPane().getSize().height+150);
//b[1].xVer = -((double) getContentPane().getSize().width+100)/((double) getContentPane().getSize().height+150);
while(true) {
try {
for (Bilder bi : picList) {
if(bi.x <= this.getSize().width && bi.y <= this.getSize().height)
{
bi.x += bi.xVer;
bi.y += bi.yVer;
bi.x1 += bi.xVer;
bi.y1 += bi.yVer;
}
else{
bi.x = bi.xStd;
bi.y = bi.yStd;
bi.x1 = 0;
bi.y1 = 0;
if(bi.equals(b[0]))
b[0].xVer = ((double) this.getSize().width+100)/((double) this.getSize().height+150);
if(bi.equals(b[1]))
b[1].xVer = -((double) this.getSize().width+100)/((double) this.getSize().height+150);
}
if(h != getContentPane().getSize().height || w != getContentPane().getSize().width)
{
h = getContentPane().getSize().height; w = getContentPane().getSize().width;
//b[1].x = this.getSize().width+b[1].x1;
b[2].x = this.getSize().width/2-50;
b[3].y = this.getSize().height/2-100;
System.out.println("TEST");
b[0].xVer = ((double) this.getSize().width-b[0].x)/((double) this.getSize().height-b[0].y);
b[1].xVer = -((double) 100+b[1].x)/((double) this.getSize().height-b[1].y);
}
}
//b[1].xStd = this.getSize().width;
//b[2].xStd = this.getSize().width/2-50;
//b[3].yStd = this.getSize().height/2-100;
repaint();
Thread.sleep(10);
}
catch (InterruptedException e){}
}
}
}
public class Bilder extends JComponent{
Image img;
double x;
double y;
double xVer;
double yVer;
double xStd;
double yStd;
int runs;
double x1, y1;
public Bilder(double x, double y, String str, double xVer, double yVer){
this.x=x;
this.y=y;
this.img=getImage(getDocumentBase(),str);
this.xVer=xVer;
this.yVer=yVer;
this.xStd = x;
this.yStd = y;
this.runs = 1;
this.x1 = 0;
this.y1 = 0;
}
}}
Vielen Dank für Tipps