JPanel: Zeichnen funktioniert nicht



  • Hi, ich soll ein Programm schreiben was Linien zeichnet wenn man die Maus drückt. Also vom letzten Mausklick zum aktuellen Mausklick.

    Im Prinzip nicht schwer. Mein Problem ist jetzt das das JPanel nach überschreiben der paintComponent-Methode grau ist und nichts passiert. Wenn ich die Methode weglasse ist es schwarz wie im Konstruktor definiert.

    Was mache ich falsch?

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Punkte extends JPanel {
    
    	public class Maus extends MouseAdapter {
    
    		public void mousePressed (MouseEvent e)  {
    
    			x2 = e.getX();
    			y2 = e.getY();
    
    			repaint();
    		}
    	}
    
    	public int x1,x2,y1,y2 = 0;
    
    	Punkte () {
    
    		setBackground(Color.black);
    		setForeground(Color.yellow);
    	}
    
    	public static void main(String [] args) {
    
    		Punkte meinePunkte = new Punkte();
    
    		JFrame frame = new JFrame("Punkte verbinden");
    
    		frame.setSize(500, 500);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.add(meinePunkte);
    		frame.setVisible(true);
    	}
    
    	public void paint(Graphics g){
    
    		g.drawLine(x1, y1, x2, y2);
    		x1=x2;
    		y1=y2;
    	}
    }
    


  • Vlt. hilft ein frame.addMouseListener(new Maus());



  • AlexDozer schrieb:

    Mein Problem ist jetzt das das JPanel nach überschreiben der paintComponent-Methode grau ist und nichts passiert.

    Was denn nun? Im Quelltext überschreibst du paint().



  • import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Punkte extends JPanel {
    
        public class Maus extends MouseAdapter {
    
            public void mousePressed (MouseEvent e)  {
    
                x2 = e.getX();
                y2 = e.getY();
    
                repaint();
            }
        }
    
        public int x1,x2,y1,y2 = 0;
    
        Punkte () {
    
            setBackground(Color.black);
            setForeground(Color.yellow);
            addMouseListener(new Maus()); // Registrieren nicht vergessen!
        }
    
        public static void main(String [] args) {
    
            Punkte meinePunkte = new Punkte();
    
            JFrame frame = new JFrame("Punkte verbinden");
    
            frame.setSize(500, 500);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(meinePunkte);
            frame.setVisible(true);
        }
    
        public void paint(Graphics g){
    
            super.paint(g); // Sofern Du die Komponente nicht von 0 an
                            // "Programmieren" willst! (hier nutzt Du setBackgraund etc
            g.drawLine(x1, y1, x2, y2);
            x1=x2;
            y1=y2;
        }
    }
    

    Gruß



  • linu(x)bie schrieb:

    public void paint(Graphics g){
                   
            super.paint(g); // Sofern Du die Komponente nicht von 0 an
                            // "Programmieren" willst! (hier nutzt Du setBackgraund etc
            g.drawLine(x1, y1, x2, y2);
            x1=x2;
            y1=y2;
        }
    }
    

    Wenn es um Swing geht, sollte man nicht paint() überschreiben sondern paintComponent()!

    http://java.sun.com/products/jfc/tsc/articles/painting/


Anmelden zum Antworten