Hallo
Also dieses Thema knüpft an das von gestern an (Linie ausgeben, die sich Periodisch verlängert).
Und zwar habe ich folgende Klassen:
(Habe die zu meinem Verständnis auskommentiert)
AnimationDemo:
Kurve:
GrafikPanel:
Auf tastendruck soll jetzt die Linie verlängert werden. Warum bleibt Trotzdem wenn ich die Pfeiltaste nach Links drücke die Linie gleichlang? Ich erhöhe doch die Variable i um 1, oder etwa nicht?
Danke im vorraus
MfG
Schubi
Also dieses Thema knüpft an das von gestern an (Linie ausgeben, die sich Periodisch verlängert).
Und zwar habe ich folgende Klassen:
(Habe die zu meinem Verständnis auskommentiert)
AnimationDemo:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnimationDemo extends JFrame implements KeyListener { //AnimationDemo erbt von JFrame bzw. AnimationDemo erweitert JPanel
private Kurve neueKurve; //Objekt Kurve wird mit Namen "neueKurve" bereitgestellt
private GrafikPanel grafikPanel;
public AnimationDemo() { //Konstruktor
super("Grafik"); //Beschriftung für das Zeichenfenster was noch erstellt wird
setSize(500,500); //Größe für das Zeichenfenster
setBackground(Color.white);
grafikPanel = new GrafikPanel(); //Objekt GrafikPanel mit Namen "grafikPanel" wird erstellt
add(grafikPanel); /* Fügt grafikPanel in den Container des JFrames ein (in dessen contentPanel)
***Bedeutet das das Objekt "grafikPanel" im JFrame ausgegeben wird
***Es wird also zu JFrame zum ausgeben hinzugefügt
*/
neueKurve = new Kurve(grafikPanel); //Objekt "neueKurve" wird erstellt und als Parameter das Objekt "grafikPanel" übergeben
neueKurve.start(); //Thread wird gestartet
setVisible(true); //Fenster sichtbar machen
}
public void keyPressed(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.VK_LEFT) {
grafikPanel.setI();
}
}
public void keyReleased(KeyEvent event) {
}
public void keyTyped(KeyEvent event) {
}
public static void main(String args[]) {
new AnimationDemo(); //Objekt AnimationDemo wird erstellt
}
}
Kurve:
Code:
import java.awt.*;
import javax.swing.*;
class Kurve extends Thread { // Klasse die von Thread erbt
private GrafikPanel grafikPanel; // Objekt wird mit Namen "grafikPanel" belegt
public Kurve(GrafikPanel grafikPanel) { //Methode, die ein Objekt als Parameter erwartet
this.grafikPanel = grafikPanel; /* Instanzvariable wird gezielt adressiert, da
*** der Parameter auch grafikPanel heißt und er
*** deswegen die Instanzvariable überlagert
*/
}
public void run() { // Thread wird gestartet
while(true) {
try {
sleep(50);
}
catch (InterruptedException e) {
}
grafikPanel.repaint(); /* wird genutzt um "GrafikPanel neu zu zeichnen
*** dadurch wird indirekt die Methode "paintComponent"
*** aufgerufen und so die Linie aktualisiert.
*/
// grafikPanel.setI(); //Methode "setI" wird aufgerufen
}
}
}
GrafikPanel:
Code:
import java.awt.*;
import javax.swing.*;
class GrafikPanel extends JPanel { //GrafikPanel erbt von JPanel
int i;
public GrafikPanel() { //Konstruktor
i = 41;
}
public void paintComponent(Graphics g) { /* "paintComponent" ist eine von JPanel geerbte
*** Methode,die wir überschreiben,d.h. neu definieren
*** um unsere Linie zu zeichnen
*** "Graphics g" stellt ein Grafikobjekt mit dem Namen
*** g bereit und übergibt es "paintComponent"
*/
g.drawLine(100,40,100,i); //Linie wird gezeichnet an Positionen (x1,y1 zu x2,y2)
}
public void setI() { //Methode die I um 1 erhöht
i++;
}
}
Auf tastendruck soll jetzt die Linie verlängert werden. Warum bleibt Trotzdem wenn ich die Pfeiltaste nach Links drücke die Linie gleichlang? Ich erhöhe doch die Variable i um 1, oder etwa nicht?
Danke im vorraus
MfG
Schubi