Hallo zusammen,
im folgenden Programm soll nach Betätigen eines Buttons ein Ball vom Bildschirmrand in die Mitte laufen.
Das funktioniert auch soweit, wenn ich den Ablauf automatisch starten lasse, d.h. nicht über den Button in der Methode "public void actionPerformed(ActionEvent e)".
Dazu lege den Aufruf der Methode "Bewegen()" beispielsweise unter "public void start()" ab.
Lege ich den Aufruf "Bewegen()" allerdings wie im Beispiel unten unter "public void actionPerformed(ActionEvent e)" ab, bleibt der Ball am linken Bildschirmrand liegen und wird nicht neu gezeichnet.
Dennoch arbeitet das Programm im Hintergrund und berechnet jeweils die nächste Position korrekt. Diese ist über die Konsole sichtbar, da ich die aktuelle Position in einer Klasse ausgeben lasse.
Wo ist der Fehler?
im folgenden Programm soll nach Betätigen eines Buttons ein Ball vom Bildschirmrand in die Mitte laufen.
Das funktioniert auch soweit, wenn ich den Ablauf automatisch starten lasse, d.h. nicht über den Button in der Methode "public void actionPerformed(ActionEvent e)".
Dazu lege den Aufruf der Methode "Bewegen()" beispielsweise unter "public void start()" ab.
Lege ich den Aufruf "Bewegen()" allerdings wie im Beispiel unten unter "public void actionPerformed(ActionEvent e)" ab, bleibt der Ball am linken Bildschirmrand liegen und wird nicht neu gezeichnet.
Dennoch arbeitet das Programm im Hintergrund und berechnet jeweils die nächste Position korrekt. Diese ist über die Konsole sichtbar, da ich die aktuelle Position in einer Klasse ausgeben lasse.
Wo ist der Fehler?
Java:
package Pack1;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Start extends JApplet implements ActionListener {
private Weg Weg=new Weg();
private JButton VonLinks1;
private JButton VonLinks2;
private JButton VonRechts;
private JButton Schliessen;
public void init()
{
Import Import = new Import();
Import.TXTImport();
setSize(800,800);
JPanel MainPannel = new JPanel();
MainPannel.setLayout(null);
getContentPane().add(MainPannel);
MainPannel.setBounds(0, 0, 800, 800);
setVisible(true);
VonRechts = new JButton("Von rechts");
VonLinks1 = new JButton("Von links1");
VonLinks2 = new JButton("Von links2");
Schliessen = new JButton("Schließen");
MainPannel.add(VonRechts);
MainPannel.add(VonLinks1);
MainPannel.add(VonLinks2);
MainPannel.add(Schliessen);
int PosxStart = 50;
int PosyStart = 750;
int BreiteButton = 160;
int HoeheButton = 40;
int delta = 20;
VonRechts.setBounds(PosxStart, PosyStart, BreiteButton, HoeheButton);
VonLinks1.setBounds(PosxStart+(BreiteButton+delta)*1, PosyStart, BreiteButton, HoeheButton);
VonLinks2.setBounds(PosxStart+(BreiteButton+delta)*2, PosyStart, BreiteButton, HoeheButton);
Schliessen.setBounds(PosxStart+(BreiteButton+delta)*3, PosyStart, BreiteButton, HoeheButton);
VonRechts.addActionListener(this);
VonLinks1.addActionListener(this);
VonLinks2.addActionListener(this);
Schliessen.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == VonRechts)
{
Pack1.GlobalVar.StartPos[0] = 700;
Pack1.GlobalVar.StartPos[1] = 350;
Bewegen();
}
if (e.getSource() == VonLinks1)
{
System.out.println("Test");
//Pack1.GlobalVar.StartPos[0] = 0;
//Pack1.GlobalVar.StartPos[1] = 350;
}
if (e.getSource() == VonLinks2)
{
System.out.println("Test");
//Pack1.GlobalVar.StartPos[0] = 0;
//Pack1.GlobalVar.StartPos[1] = 350;
}
if (e.getSource() == Schliessen)
{
System.exit(0);
}
}
public void paint( Graphics g )
{
super.paint(g);
g.setColor(new Color(100,100,250));
g.fillOval(GlobalVar.AktPos[0], GlobalVar.AktPos[1], 15, 15);
}
public void start()
{
}
public void Bewegen()
{
while (Pack1.GlobalVar.AktPos != Pack1.GlobalVar.SollPos)
{
Weg.NaechstePos();
try
{
Thread.sleep(200);
} catch (InterruptedException e)
{
System.out.println("Timer Error");
}
repaint();
}
}
}