Hallo Leute,
also grob gesagt, ich hab ein Frame -> JPanel -> und darin ein Array mit JPanels (zb 3x3)
in den letzteren ArrayPanels hab ich ein mouselistener, der mir sagen soll in welchem Panel ich die Maus geklickt hab und in welchem Panel ich diese losgelassen habe.
Leider bekomme ich immer nur bei release die id vom Panel, dort wo ich press gedrückt hab...
Hier noch mein kleine Panelklasse:
Hat jemand ne Idee wie ich das sonst angehen könnte??? Anbei noch ein Bild zum veranschaulichen.
Danke schonmal im vorraus für eure Hilfe
ei noch ein kleines Bild ^^
Edit: wenn ich zb e.getComponent() mache bekomme ich immer die gleiche, da es ja immer die gleichen Panels sind nur andere Index-Nummer haben
also grob gesagt, ich hab ein Frame -> JPanel -> und darin ein Array mit JPanels (zb 3x3)
in den letzteren ArrayPanels hab ich ein mouselistener, der mir sagen soll in welchem Panel ich die Maus geklickt hab und in welchem Panel ich diese losgelassen habe.
Leider bekomme ich immer nur bei release die id vom Panel, dort wo ich press gedrückt hab...
Hier noch mein kleine Panelklasse:
Java:
package Aufgabe1;
import CircleField.*;
import java.awt.Color;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputListener;
//Klasse Circle ---------------------------------------------------------------------
public class Circle extends JPanel implements MouseInputListener{
//Variablen
private boolean draw = false;
private Color color = Color.MAGENTA;
private int id;
Point CursorS,CursorE;
static int Merk=-1;
int temp;
private boolean Pressed;
boolean rel = false;
boolean Klick=false;
boolean go1=false;
boolean go2=false;
//Methoden
public boolean isPressed(){
return this.Pressed;
}
public void setPress(boolean var){
this.Pressed = var;
}
public void initReihe(boolean var){
if (var){
temp = SpielFeld.getReihenfolge(); //temp = aktuelle Reihenfolge
}
}
public boolean isDraw() {
return draw;
}
public void setDraw(boolean draw) {
this.draw = draw;
repaint();
}
public void setColor(Color color) {
this.color = color;
repaint();
}
//Konstruktor
public Circle(int id) {
this.id=id;
this.addMouseListener(this);
setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
if (isDraw()) {/*
setDraw(false);
SpielFeld.setReihenfolgeMinus();*/
} else {
setDraw(true);
SpielFeld.setGemalteKreise(); //Zählt anz an gem. Kreisen hoch!
SpielFeld.setReihenfolgePlus();
initReihe(true); //sodass temp nummer bekommt
}
}
});
//this.setBackground(Color.MAGENTA); //innerstes Panel
}
@Override
public Dimension getPreferredSize() {
//Größe der kleinen Panels
return new Dimension(65, 65);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int fontSize = 20;
if (draw) {
g.setColor(color);
g.fillOval(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2);
g.setFont(new Font("TimesRoman", Font.BOLD, fontSize));
g.drawString(""+temp, 0, fontSize); //Malt akt. Reihenfolgenummer in Feld
initReihe(false);
}
}
@Override
public void mouseDragged(MouseEvent e){
}
@Override
public void mouseClicked(MouseEvent e) {;}
@Override
public void mousePressed(MouseEvent e) {
setPress(true);
System.out.println("Mouse Pressed "+id);
}
@Override
public void mouseReleased(MouseEvent e){
}
@Override
public void mouseEntered(MouseEvent e) {
if (isPressed()){
setPress(false);
System.out.println("Mouse Released "+id);
}
}
@Override
public void mouseExited(MouseEvent e) {;}
@Override
public void mouseMoved(MouseEvent e) {;}
}//Ende Circle Klasse
Danke schonmal im vorraus für eure Hilfe

Edit: wenn ich zb e.getComponent() mache bekomme ich immer die gleiche, da es ja immer die gleichen Panels sind nur andere Index-Nummer haben
Zuletzt bearbeitet: