Java repaint() zeichnet Canvas Objekt nicht neu

Diskutiere Java repaint() zeichnet Canvas Objekt nicht neu im Java/Mono/dotGNU Forum im Bereich Programmieren unter Linux/Unix; Kann mir jemand sagen, warum der Aufruf von "malFlaeche.repaint()" in den Methoden "mouseMoved" und "mouseDragged", in der Klasse "Events" dazu...

  1. #1 Mitzekotze, 25.07.2009
    Mitzekotze

    Mitzekotze little man

    Dabei seit:
    01.12.2006
    Beiträge:
    750
    Zustimmungen:
    0
    Kann mir jemand sagen, warum der Aufruf von "malFlaeche.repaint()" in den Methoden "mouseMoved" und "mouseDragged", in der Klasse "Events" dazu führt, dass die komplette Fläche des Canvas Objektes "malFlaeche" weiß eingefärbt wird? Es scheint so, als ob für das Neuzeichnen nicht meine überschriebene "update()" bzw. "paint()" Methode verwendet wird, sondern die entsprechenden Methoden aus der Eltern Klasse "Canvas".

    Hat einer von euch eine Idee wo der Fehler liegt?

    Code:
    import java.awt.BasicStroke;
    import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    @SuppressWarnings("serial")
    public class JavaPaint extends Canvas
    {
        public static void main(String[] args)
        {
            @SuppressWarnings("unused")
            JavaPaint ob = new JavaPaint();
        }
        
        private Frame frame;
        private Canvas malFlaeche;
        
        private Graphics2D graKontext;
        private Image bufferImage;
        private Color farbe;
        private BasicStroke stiftStaerke;
        
        private int X;
        private int Y;
        private int altX;
        private int altY;
        
        public JavaPaint()
        {
            X = 0;
            Y = 0;
            altX = 0;
            altY = 0;
            
            farbe = Color.black;
            stiftStaerke = new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);       
            
            malFlaeche = new Canvas();
            malFlaeche.setBackground(Color.WHITE);
            malFlaeche.addMouseMotionListener(new Events());
            
            frame = new Frame("JavaPaint");
            frame.add(malFlaeche,BorderLayout.CENTER);
            frame.addWindowListener(new Events());
            frame.setSize(500,500);
            frame.setVisible(true);
        }
        
        @Override
        public void update(Graphics g)
        {
            // Initialisierung des DoubleBuffers
            if (bufferImage == null)
            {
                bufferImage = malFlaeche.createImage (malFlaeche.getSize().width, malFlaeche.getSize().height);
                graKontext = (Graphics2D) bufferImage.getGraphics();
            }
            
            paint(graKontext);
            g.drawImage(bufferImage,0,0,null);
        }
        
        @Override
        public void paint(Graphics g)
        {
            g.setColor(farbe);
            ((Graphics2D) g).setStroke(stiftStaerke);
            g.drawLine(X-2, Y-2 , altX-2, altY-2);
        }
        
        public class Events extends WindowAdapter implements MouseMotionListener
        {
            @Override
            public void mouseDragged(MouseEvent e)
            {
                X = e.getX();
                Y = e.getY();
                
    //            update(malFlaeche.getGraphics());
                malFlaeche.repaint();
                
                altX = e.getX();
                altY = e.getY();
            }
    
            @Override
            public void mouseMoved(MouseEvent e)
            {
                altX = e.getX();
                altY = e.getY();
    //            malFlaeche.getGraphics().drawImage(bufferImage,0,0,null);
                malFlaeche.repaint();
            }
            
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        }
    }
    
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Mitzekotze, 30.07.2009
    Mitzekotze

    Mitzekotze little man

    Dabei seit:
    01.12.2006
    Beiträge:
    750
    Zustimmungen:
    0
    He he hab den Fehler gefunden. Man sollte auch das Objekt für den Canvas aus der Klasse erschaffen, in der man von Canvas erbt und die "paint()" bzw. "update()" Methode überschrieben hat. Hab das ganze jetzt durch das Erstellen einer eigenen Klasse gelöst, welche von Canvas erbt und die beiden Methoden überschreibt.
     
Thema:

Java repaint() zeichnet Canvas Objekt nicht neu

Die Seite wird geladen...

Java repaint() zeichnet Canvas Objekt nicht neu - Ähnliche Themen

  1. Java 13 freigegeben

    Java 13 freigegeben: Java 13 ist wie geplant ein halbes Jahr nach Java 12 erschienen. Die neue Version implementiert insgesamt fünf Neuerungen. Neu in die Sprache...
  2. Hermes: JavaScript-Engine von Facebook

    Hermes: JavaScript-Engine von Facebook: Facebook hat Hermes, eine JavaScript-Engine zur Ausführung von React Native auf Android, vorgestellt. Hermes optimiert die Ausführung von...
  3. Durch Javascript generierte Webseiten parsen

    Durch Javascript generierte Webseiten parsen: Hallo zusammen, überlicherweise waren Webseiten immer ganz gut zu parsen, mittlerweile läd der Browser jedoch nur noch ein JavaScript von der...
  4. Werkstudent/ in als Mobile -Entwickler für Android (Java)

    Werkstudent/ in als Mobile -Entwickler für Android (Java): Werkstudent/ in als Mobile -Entwickler für Android (Java) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  5. Mobile -Entwickler für Android (Java) in Vollzeit (m/w)

    Mobile -Entwickler für Android (Java) in Vollzeit (m/w): Mobile -Entwickler für Android (Java) in Vollzeit (m/w) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden