MouseListiner

0

witam , mam problem taki ze jak najezdzam to zmienia sie kolor kola wychodze i sie zmienia na pierwotny a jak 2 raz wchodze to juz sie sypie program... nizej zamieszczam moja klase z rysowaniem i funkcja mouselistiner, ma ktos jakies pomysly jak to rozwiazaC?

public class rysuj extends JPanel implements MouseListener{
	
	protected static Graphics2D g2d;
	boolean mouseEntered  ; 
	protected void paintComponent(Graphics g) {
		addMouseListener (this); 
		super.paintComponent(g);
		 g2d = (Graphics2D) g;
		  
		//prostokat
		  if(mouseEntered )
		  {
			  	g2d.setColor(Color.RED);
				g2d.drawOval(10, 10, 380, 380);
				g2d.fillOval(10, 10, 380, 380);
				repaint(); 
		  }
		  else
		  {
				//kolo
				g2d.setColor(Color.ORANGE);
				g2d.drawOval(10, 10, 380, 380);
				g2d.fillOval(10, 10, 380, 380);
				repaint(); 
		  }
		  
		
		
		
	}
	public void mouseEntered (MouseEvent me) 
	{ 
		mouseEntered = true;
		repaint();
		
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseExited(MouseEvent me)
	{
		mouseEntered = false;
		repaint();
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	
	

}
 
1

Za takie kody to powinni dawać zakaz programowania...

  1. Za wywołanie repaint() wewnątrz paint() powinni ci dać medal
  2. Za kopiowanie kodu w programie który ma kilka linijek tak samo
    Rozumiem że bląd stackOverflow cię nie zaciekawił?
  3. Za robienie klas z serii "człowiek orkiestra" też należałby sie zakaz. Lekcja na dziś: zasada jednej odpowiedzialności. Jak cos jest panelem to nie jest mouse listenerem...
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Rysuj extends JPanel {
    private static final long serialVersionUID = 1L;
    protected static Graphics2D g2d;
    private Color kolor = Color.red;
    boolean mouseEntered;

    public Rysuj() {
        addMouseListener(new KolorekMouseListener(this));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g2d = (Graphics2D) g;
        g2d.setColor(kolor);
        g2d.drawOval(10, 10, 380, 380);
        g2d.fillOval(10, 10, 380, 380);
    }

    protected void changeColor(Color c) {
        kolor = c;
    }

    public static void main(String[] args) {
        JFrame okno = new JFrame();
        okno.add(new Rysuj());
        okno.pack();
        okno.setVisible(true);
    }

    class KolorekMouseListener implements MouseListener {

        private final Rysuj panel;

        public KolorekMouseListener(Rysuj rysuj) {
            panel = rysuj;
        }

        @Override
        public void mouseEntered(MouseEvent me) {
            changeColor(Color.red);
        }

        @Override
        public void mouseExited(MouseEvent me) {
            changeColor(Color.blue);
        }

        private void changeColor(Color c) {
            panel.changeColor(c);
            panel.repaint();
        }

        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

    }

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1