Linie ausgeben, die sich periodisch verlängert

Status
Nicht offen für weitere Antworten.

Schubi

Mitglied
Hallo erstmal !
Willkommen zu meinem ersten Post :lol:

Also zu meinem Problem:

Ich möchte eine Linie machen, die sich ständig/stetig verlängert.
Ist ansich kein Problem:

Code:
public void paint(Graphics g) {
             int i = 41;
            while(i<100) {
           g.drawLine(100,40,100,i);
             i++;
                 }
           }


Nur ist natürlich die Linie schon längst fertig gemallt, da keine Verzögerung drin ist.
Mithilfe von Threads (und ich möchte Threads verwenden) kann man das anhand der Sleep-Tiem ja verzögern:

Klasse Grafik:
Code:
import java.awt.*;
    import java.lang.*;
    import java.util.*;
   
    public class Grafik extends Frame{
        Kurve neueKurve;
       
        public Grafik() {
            super("Grafik");
            setBackground(Color.white);
            setSize(500,500);
            setVisible(true);
            neueKurve = new Kurve();
            neueKurve.start();
        }
       
        public static void main(String[] args) {
            Grafik wnd = new Grafik();
            wnd.addWindowListener(new WindowClosing(true));
        }
    }

Klasse Kurve mit Thread:
Code:
    import java.awt.*;
    import java.lang.*;
    import java.util.*;
   
    public class Kurve extends Thread {
       
        public Kurve() {
         
        }
       
        public void run() {
            try {
                sleep(1000);
            }
            catch (InterruptedException e) {
               
            }
        }
    }

NUr wie baue ich jetzt das Graphics g ein? Wie kann ich die Linie in dem Thread erstellen.
Von der Struktur her müsste das ja so aussehen:

Code:
public void run() {
while(i<100){
...befehlfürliniezeichnen...(50,50,60,i);
            try {
                sleep(1000);
            }
            catch (InterruptedException e) {
               
            }
          }
        }
So wird nachjedem Liniezeichnen die sleeptime ausgeführt.
Nur weiß ich nicht, wie ich das in Java umsetzen kann ...

Bitte um hilfe :)

Danke im vorraus

Grüße
Schubi
 

VdA

Bekanntes Mitglied
versuch doch ma kurve panel zu erben sollte mit jdk1.5 funzen
aber ich glaub vorher hatte ich damit probleme
dann musst du es einfach nur adden.
 

André Uhres

Top Contributor
1. Eine Klasse "GrafikPanel" schreiben die JPanel erweitert und paintComponent überschreibt
2. In paintComponent kommt keine Schleife, dort wird einfach nur die Linie
gezeichnet.
3. Die Variable i darf nicht lokal in paintComponent deklariert sein,
sondern auf Klassenebene.
4. Der Thread muss eine Referenz auf "GrafikPanel" bekommen (z.B. über den Konstruktor).
Er bekommt in "run" eine Schleife eingebaut, mit "sleep" und "grafikPanel.repaint()",
und erhöht die Variable i von "GrafikPanel" über eine entsprechende public/protected Methode von "GrafikPanel".

EDIT: ach ja, willkommen im Forum, Schubi :D
 

Schubi

Mitglied
Danke schön fpr die schnelle antwort:)

Leider hab ich nur die hälfte von dem Verstanden, was du geschrieben hast *g*

Also erstmal noch zu mir bzw. zu meinen Fähigkeiten mit Java:
Ich habe bis jetzt noch nie wirklich mit Java programmiert, sondern eher (seit ca. 1 1/2 Jahren) mit diesem "tollen" Schuljava, also nach dem Turtle Prinzip. Daher fällt mir der umstieg ein wenig schwer, da ich die ganzen "richtigen" Befehle nicht kenne, sondern nur die vorgekauten turtle befehle.

Was genau soll ich machen?

Also eine neue Klasse mit dem Namen "GrafikPanel" erstellen. Okay, das ist soweit klar
Code:
public class GrafikPanel

...die JPanel erweitert und paintComponent überschreibt ... hier wirds schon unklar :) (sorry)
was genau soll ihc hier machen?
Punkt 3 ist soweit klar und bezieht sich wohl auf den ersten von mir geposteten code.
(den ich so nicht mehr verwenden will, sondern nur so als beispeil genommen habe)
punkt 4 ist mir auch nicht geläufig! was hat es mit repaint auf sich?

es tut mir leid wenn ich so gut wie garnichts verstanden habe, nur wie gesagt ich kenne so gut wie keine befehle, da ich nur die turtle-bibliothek benutzt habe.

Ich wäre dir sehr dankbar wenn du mir den code hinschreiben könntest (ja ich weiß^^, dann bekomm ich shcon wieder alles vorgelegt) aber so kann ich es dann im endeffekt nachvollziehen und mir die befehle erarbeiten!

Danke nochmals :)

Grüße Schubi
 

André Uhres

Top Contributor
Code:
/*
 * AnimationDemo.java
 */
package animation;
import java.awt.*;
import javax.swing.*;
public class AnimationDemo extends JFrame {
    private Kurve neueKurve;
    public AnimationDemo() {
        super("Grafik");
        setSize(500,500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GrafikPanel grafikPanel = new GrafikPanel();
        add(grafikPanel);
        neueKurve = new Kurve(grafikPanel);
        neueKurve.start();
        setVisible(true);
    }
    public static void main(String args[]) {
        new AnimationDemo().setVisible(true);
    }
}
class GrafikPanel extends JPanel{
    private int i;
    public GrafikPanel(){
        i= 41;
    }
    public void paintComponent(Graphics g){
        g.drawLine(100,40,100,i);
    }
    public void setI(){
        i++;
    }
}
class Kurve extends Thread {
    private GrafikPanel grafikPanel;
    public Kurve(GrafikPanel grafikPanel) {
        this.grafikPanel = grafikPanel;
    }
    public void run() {
        while(true){
            try {sleep(100);} catch (InterruptedException e) {}
            grafikPanel.repaint();
            grafikPanel.setI();
        }
    }
}

EDIT:
Schubi hat gesagt.:
...die JPanel erweitert und paintComponent überschreibt ...
"class GrafikPanel extends JPanel" bedeutet dass GrafikPanel JPanel erweitert, oder von JPanel erbt.
"paintComponent" ist eine von JPanel geerbte Methode, die wir überschreiben, d.h. neu definieren
um unsere Linie zu zeichnen.
"grafikPanel.repaint()" wird benutzt um "GrafikPanel" neu zu zeichnen, dadurch wird indirekt die
Methode "paintComponent" aufgerufen und so unsere Linie aktualisiert.
 

Leroy42

Top Contributor
Code:
import java.awt.*; 
import javax.swing.*; 

public class LinienBeispiel extends JFrame { 
    public LinienBeispiel() { 
        setBounds(100, 100, 300, 300);
        final LinienP linienP = new LinienP();
        add(linienP);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setVisible(true); 
        new Thread(new Runnable() {
          public void run() {
            do {
              try {Thread.sleep(25);} catch(InterruptedException e) {}
            } while (!linienP.advance());
          }}).start();
    } 
    public static void main(String[] args) { 
        new LinienBeispiel(); 
    } 
}

class LinienP extends JPanel { 
    int yPos = 40; 
    public void paintComponent(Graphics g) { 
        super.paintComponent(g);
        g.drawLine(100, 40, 100, yPos); 
    } 
    public boolean advance() { 
      return ++yPos < 100;
    } 
}
 

Schubi

Mitglied
Hey danke schön :)
Durch das Programm steige ich so langsam druch, nur noch 2 Fragen :) (bzw. 3 --> eine davon hat nur indirekt was damit zu tun):

1.)
Was genau für eine Funktion hat
add(grafikPanel);

2.)
this.grafikPanel = grafikPanel;
da this .. welche Funktion hat dies?

3.)
setVisible(true);
ist einmal zuviel drin oder?

ich danke dir :) wenn du wüsstest wieviele stunden ich schon im inet nach sowas gesucht habe ^^

EDIT:
@Leroy42:

Bei deinem Programm erscheint bei mir nur ein Punkt, der sich nicht vergrößert !
 

Leroy42

Top Contributor
1.)
Was genau für eine Funktion hat
add(grafikPanel);


Dies fügt das Panel in den Container des JFrames ein,
genauer in dessen contentPane

2.)
this.grafikPanel = grafikPanel;
da this .. welche Funktion hat dies?

Dies dient dazu die Instanzvariable gezielt zu adressieren,
da ja der Parameter auch grafikPanel heißt und er deswegen
die Instanzvariable überlagert.


3.)
setVisible(true);
ist einmal zuviel drin oder?


Stimmt! :D


ich danke dir wenn du wüsstest wieviele stunden ich schon im inet nach sowas gesucht habe ^^

EDIT:
@Leroy42:

Bei deinem Programm erscheint bei mir nur ein Punkt, der sich nicht vergrößert !

Ich wundere mich daß es überhaupt übersetzbar ist, da ich keine Zeit
hatte es zu kompiliere (ich habe direkt im Browser gecodet).

Aber ich such mal den Fehler... :###
 

Schubi

Mitglied
Gut danke schön :)

Okay, im endeffekt soll das agnze zu einem spiel werden. es soll eine imitation dieses Spiels hier werden:

http://games.acont.de/Detailed/32.html

das spielen wir in der schule immer in den pausen und da wollt ich das dann doch gerne mal selber machen :)
(vielleicht noch eine handy version oder so ^^)

naja auf jeden fall ging das mit der beschränkten turtle bibliothek nciht, da der keylistener fehlte. um den keylistener zu nutzen konnte ich aber wiederum nicht das fenster benutzen, was in unserer turtle bibliothek vorgegeben war ... usw. so musste ich dann wohl oder übel mir das "richtige " jave anschauen ^^

gut also danke schön für eure hilfe, ich verspreche euch, ich werde euch weiter nerven *g*
 

Leroy42

Top Contributor
Fehler entdeckt: Ich habe in meiner do-while-Schleife den Aufruf von repaint vergessen.



(Für wen schreib' ich das eigentlich? Hört ja doch kein Arsch mehr zu :( )

:cool:
 

Schubi

Mitglied
Doch doch :) Ich hör dir nochzu^^ Danke :)
Naja gut eigentlich hast du doch recht, da ich mich nicht selbst als Arsch bezeichne ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Linie ausgeben, die sich auf Knopfdruck verlängert Java Basics - Anfänger-Themen 2
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
J Linie wird zu lang gezeichnet Java Basics - Anfänger-Themen 4
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
P Überprüfen ob Mausklick auf Linie ist? Java Basics - Anfänger-Themen 6
W drawLine(...) - Linie soll nur begrenzt lang sein Java Basics - Anfänger-Themen 9
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
H Linie zeichnen... Java Basics - Anfänger-Themen 16
H Erste Schritte Linie/Raster mit Magnetfunktion Java Basics - Anfänger-Themen 1
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
B Konsoleninput eingegebene linie nach Eingabe löschen Java Basics - Anfänger-Themen 5
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
H gezeichnete Linie Eventhandling Java Basics - Anfänger-Themen 2
G Frage wegen Applet( Linie) Java Basics - Anfänger-Themen 2
G Linie zeichen mit JLabel Java Basics - Anfänger-Themen 7
M Linie Java Basics - Anfänger-Themen 4
A Linie zeichnen Java Basics - Anfänger-Themen 4
S Fette Linie zeichnen Java Basics - Anfänger-Themen 3
V Linie beginnt nich bei 0,0 Java Basics - Anfänger-Themen 2
G Linie innerhalb Rechteck Java Basics - Anfänger-Themen 2
G dicke linie zeichnen bzw schräges rechteck füllen Java Basics - Anfänger-Themen 2
M AWT -eigene DrawLine Methode mit Farbverlauf in der Linie ? Java Basics - Anfänger-Themen 2
G Linie/Gitter in GridBagLayout Java Basics - Anfänger-Themen 4
A Linie zeichnen per Knopfdruck --> Fehler Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
H Minimum und Maximum ausgeben lassen Java Basics - Anfänger-Themen 7
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
Tommilee Char ausgeben Java Basics - Anfänger-Themen 5
K Geldbetrag in Euro + Cents ausgeben Java Basics - Anfänger-Themen 24
M geschachtelte for-Schleifen - Einmaleins ausgeben Java Basics - Anfänger-Themen 3
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
berserkerdq2 Methodenaufrufstapel ausgeben, was ist das? Java Basics - Anfänger-Themen 2
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
Robin Gentele XML von Webserver lesen und ausgeben Java Basics - Anfänger-Themen 5
W Array ausgeben Java Basics - Anfänger-Themen 29
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
S Schachbrettmuster ausgeben Java Basics - Anfänger-Themen 3
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Array rückwärts ausgeben Java Basics - Anfänger-Themen 2
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
Kotelettklopfer Stringbuilder mit print ausgeben Java Basics - Anfänger-Themen 83
L Methoden Rückgabewert Verbergen / nicht mit ausgeben Java Basics - Anfänger-Themen 4
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
O Anzahl Datensätze ausgeben Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
M Wie kann ich hier den Abstand ausgeben? Java Basics - Anfänger-Themen 3
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
U Teilergebniss mit 0 nicht ausgeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben