Java repaint() zeichnet Canvas Objekt nicht neu

Dieses Thema: "Java repaint() zeichnet Canvas Objekt nicht neu" im Forum "Java/Mono/dotGNU" wurde erstellt von Mitzekotze, 25.07.2009.

  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

    schau mal hier --> (hier klicken). Viele Antworten inkl. passender Shell-Befehle!
    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-Anwendungsserver: WildFly 10 freigegeben

    Java-Anwendungsserver: WildFly 10 freigegeben: Der Java-Anwendungsserver WildFly ist in Version 10 erschienen. Die neue Version ist nur noch für Java 8 und 9 ausgelegt und kann unter anderem...
  2. Java Plug-in geht in Rente

    Java Plug-in geht in Rente: Oracle hat angekündigt, mit der Auslieferung von Java 9, das frühestens im Frühjahr 2017 erscheinen soll, das Java-Browser-Plug-in als veraltet zu...
  3. Quellcode der JavaScript-Engine Chakra freigegeben

    Quellcode der JavaScript-Engine Chakra freigegeben: Microsoft hat die Kernkomponenten der JavaScript-Engine Chakra wie angekündigt freigegeben. Unterstützung für Linux ist eines der vordringlichsten...
  4. Zeitplan für Java 9 bestätigt

    Zeitplan für Java 9 bestätigt: Oracle hat in einer offiziellen Mitteilung bestätigt, dass Java 9 am 23. März 2017 und damit ein halbes Jahr später als bisher geplant erscheinen...
  5. Oracle muss wegen Java zu Kreuze kriechen

    Oracle muss wegen Java zu Kreuze kriechen: Der amerikanische Softwarehersteller Oracle einigete sich mit der US-Handelsbehörde FTC darauf, dass sich das Unternehmen öffentlich der...