Repaint() in Methode

Status
Nicht offen für weitere Antworten.
K

Kaiser Karlos

Gast
nommal Ich :D

warum funkt die repaint() Anweißung nicht wenn ich die Methode "ZeichnungAktualisieren()" aufrufe?
Es funktioniert wenn ichs ins paintComponent selber schreibe allerdings muss ich nur selten den Jframe aktualisieren dass das unötige Belastung wäre und mein Programm verlangsamen würde.

Code:
package schiffeversenken;

import javax.swing.*;
import java.awt.Graphics;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;


/**
 *
 * @author user
 */

public class zeichneWelt extends JPanel {

    private JFrame Jframe;
    Graphics g;
    String title = "src/Grafiken/master.jpg";
    BufferedImage bild;                             //hier noch die arrays deklarieren
    static int zeichneSchiff[][];                               //jedesmal bei veränderungen hier aktualisieren
                                                    //dann mit repaint() des ganze aufm JFrane aktualisieren
     
               
    protected void paintComponent(Graphics g)
   {
        super.paintComponent(g);
        System.out.println( this.zeichneSchiff[1][1]+" im paintComponent");   
        zeicheneHintergrund(g);                    //ab hier alles was es zum zeichnen gibt
        zeichneSchiff Schiff = new zeichneSchiff(); //Objekt für Abbildung von Schiffen       
        Schiff.zeichne(g, zeichneSchiff);              //zeichneSchiff wir array: schiffe[][] übergeben
                                           //alles jedesmal in 2 Dimensionale arrays stecken :)
                                                  
   } 
    
    protected void zeicheneHintergrund(Graphics g){
       g.drawImage(bild,0,20,this);
       System.out.println("x: "+bild.getWidth(this)); 
       
    }
    
    public zeichneWelt(){                      //Konstruktor ; Läd Hintergrundbild
        try{
          bild = ImageIO.read(new File(title));
        }catch(IOException ioe){
          ioe.printStackTrace();
        }
        //this.zeichneSchiff = new int[6][4];  
    }
    
    
    public static void main() {               //main läd JFrame     
             //String []args
             JFrame f = new JFrame();
             f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
             f.setSize(500, 700);
             f.setContentPane(new zeichneWelt() );
             f.setVisible(true);
    }
    
    protected void ZeichnungAktualisieren() {
       repaint();
    }
    

    
}
danke schommal
 

Wildcard

Top Contributor
Gewöhn dir mal richtige Benennung an:
Klassen groß, Methoden klein
Kaiser Karlos hat gesagt.:
warum funkt die repaint() Anweißung nicht wenn ich die Methode "ZeichnungAktualisieren()" aufrufe?
repaint funktioniert.
Liegt also eher an deinem Aufruf.
btw: repaint in paintComponent führt zu Endlosrekursion
 
G

Gast

Gast
^^also ich will über mein Hauptprogramm irgendwann mal den JFrame neu aktualisieren weil sich variblen geändert haben usw. Ich hab mir das so vorgestellt dass ich dann "ZeichnungAktualisieren()" aufrufe und mit repaint() mein Jframe neu gezeichnet wird. Funktioniert jedoch nicht. Es geschieht nichts (nur wenn ich das Fenster minimiere und neu öffne wird alles aktualisiert).
 
G

Gast

Gast
ne tuts nicht des macht garnix. ich kanns genausogut weglassen aber ich muss die paintComponent irgendwie aktualisieren
 

Wildcard

Top Contributor
Code:
      zeichneSchiff Schiff = new zeichneSchiff(); //Objekt für Abbildung von Schiffen       
        Schiff.zeichne(g, zeichneSchiff);
Und warum erzeugst du dir bei jedem neuzeichnen ein neues Schiff? :autsch:
 
G

Gast

Gast
naja des ist ne Klasse die alle Schiffe zeichnet die es gibt.
Aber des repaint() funktioniert wirklich im Programm nicht. Ich will ja die paintComponent aktualisieren ( so wie wenn mann das Fenster minimiert und dann wieder öffnet ) aber mit repaint funktioniert das so irgendwie nicht
 
G

Gast

Gast
ich hab jetzt mal zum ode das dazugefügt:

protected void ZeichnungAktualisieren() {
System.out.println("repaint");
repaint();
}

bei jedem Aufruf der funktion wird repaint() ausgeführt denn man im kann im Output "repaint" 6 mal erkennen
doch das Bild verändert sich nicht

ich hab das mit dem Code getestet:

public int schiffe[][];

public void start(){
this.schiffe = new int[6][4];
schiffe[1][1]= 0;
schiffe[1][2]= 100;
zeichneWelt.zeichneSchiff = schiffe;

System.out.println(schiffe[1][1]+"im start");
zeichneWelt neuezeichnung = new zeichneWelt();
neuezeichnung.zeichneSchiff = schiffe;
neuezeichnung.main();

for(int i=0; i < 6; i++){
System.out.println("im for variable i: "+i);
schiffe[1][1]= i*5;
zeichneWelt.zeichneSchiff = schiffe;
neuezeichnung.ZeichnungAktualisieren();
try {
Thread.sleep(1000);
}
catch (InterruptedException e){
}

}
}

ich weiß nicht warum die repaint nicht funktioniert irgendeiner eine Idee?
 

Lim_Dul

Top Contributor
Ganz einfach, du arbeitest im Swing-Thread und blockierst damit die gesamt GUI. Du musst für solche Sachen wie deine Berechnungen einen eigenen Thread starten.
 

Marco13

Top Contributor
Von wo aus rufst du denn "start" auf? (Lass mich raten: Im actionPeformed eines Buttons?)

@Wildcard: repaint in paintComponent führt nicht zu einer Endlosrekursion (d.h. kein StackOverflowError oder so) aber dazu, dass der Thread, der paintet, sich bei jedem painten selbst die Aufgabe gibt, neu zu painten - dass nennt man dann das "Hornbach-Prinzip": "Es gibt immer was zu tun" :wink:

Und noch @Kaiser Karlos: Swing "optimiert" die Aufrufe von repaint. Wenn du z.B. sowas machst wie
Code:
for (int i=0; i<100; i++) repaint();
dann wird zwar 100 mal repaint aufgerufen, aber u.U. nur EINmal neu gezeichnet, weil Swing erkennt, dass die Aufrufe so dicht aufeinader folgen, dass sich dazwischen nicht viel getan haben kann. (Etwas vereinfacht)
 

Wildcard

Top Contributor
Marco13 hat gesagt.:
@Wildcard: repaint in paintComponent führt nicht zu einer Endlosrekursion (d.h. kein StackOverflowError oder so) aber dazu, dass der Thread, der paintet, sich bei jedem painten selbst die Aufgabe gibt, neu zu painten - dass nennt man dann das "Hornbach-Prinzip": "Es gibt immer was zu tun" :wink:
Ist klar. Das ist schon eine (indirekte)Endlosrekursion, bei der es aber auf Grund der Queue nicht zum Stack Overflow kommt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9
F repaint() - Methode verzögern lassen? Java Basics - Anfänger-Themen 3
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
J paint() vs repaint() Java Basics - Anfänger-Themen 3
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J repaint() funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 30
I Hangman CardLayout/repaint? Java Basics - Anfänger-Themen 2
H Variablen Probleme mit repaint() Java Basics - Anfänger-Themen 2
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
J repaint(); launisch ? Java Basics - Anfänger-Themen 3
E Altes Bild bei repaint() löschen? Java Basics - Anfänger-Themen 10
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
I repaint bei jpanel Java Basics - Anfänger-Themen 10
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
C GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts Java Basics - Anfänger-Themen 13
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
O repaint() wird nicht ausgeführt Java Basics - Anfänger-Themen 3
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
Antoras swing und repaint-Ersatz Java Basics - Anfänger-Themen 8
G Automatischer repaint bei Swing so wie bei AWT? Java Basics - Anfänger-Themen 7
M Problem mit repaint Java Basics - Anfänger-Themen 2
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
T repaint einer komponente Java Basics - Anfänger-Themen 2
E repaint() aufrufen Java Basics - Anfänger-Themen 12
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
kulturfenster Probleme mit repaint() Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
G Frage zu repaint() Java Basics - Anfänger-Themen 5
D JPanel repaint() wird nicht gemacht! Java Basics - Anfänger-Themen 7
B Problem mit repaint() Java Basics - Anfänger-Themen 8
V Reihenfolge von Befehlen - hier repaint() zu spät Java Basics - Anfänger-Themen 13
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
J probleme mit repaint Java Basics - Anfänger-Themen 2
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben