![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 16.10.2006
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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: 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
}
}
}
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++;
}
}
Danke im vorraus ![]() MfG Schubi |
|
|
| #2 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 13.11.2005
Fachbeiträge: 31.637
Abgegebene Danke: 0
Erhielt 2.565 Danke für 2.526 Beiträge
|
du brauchst unbedingt
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); sonst laufen einmal gestartete Programme im weiter, auch wenn das Fenster geschlossen wird, -------------- mach doch erstmal einen einfachen KeyListener public void keyPressed(KeyEvent event) { System.out.println("keyPressed"); } public void keyReleased(KeyEvent event) { System.out.println("keyReleased"); } public void keyTyped(KeyEvent event) { System.out.println("keyTyped"); } um zu sehen, ob das überhaupt funktioniert ------------ der KeyListener wird in deinem Programm nämlich nirgendwo verwendet, daher auch keine Reaktion auf die Tastatur, im JFrame addKeyListener(this); scheint zu funktionieren, dann sehe ich auch die Linie wachsen, ein Pixel ist natürlich nicht allzu viel |
|
|
| #3 (permalink) | |
|
Neuer Benutzer
byte
Themenstarter
Registriert seit: 16.10.2006
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Ups ^^
Ja klar Man irgendwie ist das ungewohnt das man jede Aktion die man machen möchte vorher im JFrame "adden" muss!Also das Turtle Prinzip war einfacher *gg* ![]() Danke schön, funktioniert alles wie ich es mir vorstelle
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Applet: mehrere Listenelemente nach Knopfdruck ausgeben | FFJaro | Java Basics - Anfänger-Themen | 2 | 30.11.2006 11:58 |
| Linie ausgeben, die sich periodisch verlängert | Schubi | Java Basics - Anfänger-Themen | 10 | 16.10.2006 18:22 |
| Fenster soll sich per Knopfdruck selbst auf invisible setzen | Yoda III. | AWT, Swing, JavaFX & SWT | 1 | 17.01.2005 16:34 |
| Linie zeichnen per Knopfdruck --> Fehler | Addict | Java Basics - Anfänger-Themen | 7 | 12.08.2004 16:30 |
| Auf Knopfdruck malen ?????? | VerstehNix | AWT, Swing, JavaFX & SWT | 5 | 29.01.2004 17:18 |
| Lesezeichen |
|
|