Problem - MouseListener/2DGraphics

Vxnc

Mitglied
Hallo,
Ich habe ein Problem mit meinem Code:
Java:
package packag;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Mouse implements MouseListener {

    @Override
    public void mouseClicked(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        for (int i = 0; i <= 9; i++) {
            if ((x - i) % 10 == 0) {
                x = x - i;
            }
        }
        for (int i = 0; i <= 9; i++) {
            if ((y - i) % 10 == 0) {
                y = y - i;
            }
        }

        System.out.println("X:  "+(x-10)+"Y:  "+(y-30));
       
        if (Var.pxlx.contains(x-10)) {
            if (Var.pxly.contains(y-30)) {
                if (Var.pxlx.indexOf(x-10) == Var.pxly.indexOf(y-30)) {
                } else {
                    Var.pxlx.add(x-10);
                    Var.pxly.add(y-30);
                }
            }else{
                Var.pxlx.add(x-10);
                Var.pxly.add(y-30);
            }
        }else{
            Var.pxlx.add(x-10);
            Var.pxly.add(y-30);
        }

        System.out.println(Var.pxlx.get(0));
        System.out.println(Var.pxlx.get(1));
        System.out.println(Var.pxlx.get(2));
       
        System.out.println(Var.pxly.get(0));
        System.out.println(Var.pxly.get(1));
        System.out.println(Var.pxly.get(2));
   
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}
Java:
package packag;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JLabel;

public class Label extends JLabel {

    private static final long serialVersionUID = 1L;

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        for (int i = 0; i <= Var.jf1.getSize().getWidth(); i += Var.distance) {
            Var.lbl1.setBounds(0, 0, (int) Var.jf1.getSize().getWidth(), (int) Var.lbl1.getSize().getHeight());
            g.drawLine(i, 0, i, (int) Var.lbl1.getSize().getHeight());
        }
        for (int i = 0; i <= Var.jf1.getSize().getHeight(); i += Var.distance) {
            Var.lbl1.setBounds(0, 0, (int) Var.jf1.getSize().getWidth(), (int) Var.lbl1.getSize().getHeight());
            g.drawLine(0, i, (int) Var.lbl1.getSize().getWidth(), i);
        }

        for (int i = 0; i <= Var.pxlx.size() && i <= Var.pxly.size(); i++) {
            if (Var.pxlx.size() == 0) {
            } else {
                try {
                    g.fillRect((int) Var.pxlx.get(i), (int) Var.pxly.get(i), 10, 10);
                } catch (java.lang.IndexOutOfBoundsException e) {
                }
            }
        }
        repaint();

    }
}


Das ist nur eine Klasse meines Projekts...Insgesamt wird ein Gitter gezeichnet und Kästchen eingefärbt. Diese Kästchen sollen dann wandern etc.
Wenn ich nun auf ein Kästchen Klicke, färbt es sich wie gehabt (mit JLabel und 2DGraphics gemacht). Allerdings wird spätestens nach dem 3. Click nicht mehr das Kästchen gefärbt, auf das ich geclickt habe, sondern ein anderes(die Y-Koord. bleibt gleich nur die X-K. verändert sich)

Ich würde mich über Lösungsvorschläge oder allgemeine Verbesserungen freuen!
 
allgemeine Verbesserungen
- Eigene Klassen nie so nennen wie Java-Standardklassen
- Beim posten von Code alle beteiligten Klassen posten. Es ist nicht ersichtlich, von welchem Typ die ganzen offenbar statischen Variablen der Var-Klasse sind, und welche Funktion sie haben.
- Niemals, niemals, niemals, einen catch-Block leer lassen
- kein repaint() in paintComponent() --> Endlosschleife. Nimm lieber Instanzen von javax.swing.Timer.
 
Noch eine Anmerkung:

Ich verwende statt
Code:
 public class Mouse implements MouseListener {

Code:
 public class Mouse extends MouseAdapter {

Das erspart das Überschreiben der Methoden mousePressed, mouseReleased, mouseEntered und mouseExited.

Ansonsten kann man dir nur weiterhelfen, wenn du wie von Harry beschrieben, alle beteiligten Klassen hochlädst.
 

Zurück
Oben