java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 17.10.2006, 11:03   #1 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 16.10.2006
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Linie ausgeben, die sich auf Knopfdruck verlängert

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 

            }
        }
    }
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
Schubi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 17.10.2006, 11:49   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
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
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 17.10.2006, 13:25   #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
Schubi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de