MouseListener-Objekte zu den Graphics-Objekten einfügen

ExceptionOfExpectation

Bekanntes Mitglied
Hallo,
Ich möchte mit der Hilfe von paint()-Methode Grafik-Objekte erstellen und sie mit MouseListener-Objekten ausstatten, wie im folgenden Code:

[CODE lang="java" title="WidRechteck" highlight="20, 27, 269"]
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;

class Rechteck extends Frame{
private int x;
private int y;

private int width;
private int height;
private String klick;
ControllerEventHandler ceh;


Rechteck(int x, int y, int width, int height){
this.x = x;
this.y=y;
this.width=width;
this.height=height;
this.addMouseListener(ceh);
}

Rechteck(int x, int y, String klick){
this.x = x;
this.y=y;
this.klick = klick;
this.addMouseListener(ceh);

}

public String getKlick() {
return klick;
}

public void setKlick(String klick) {
this.klick = klick;
}

public int getX(){
return x;
}
public int getY(){
return y;
}

public void bewege(int deltaX, int deltaY){
this.x+=deltaX;
this.y+=deltaY;
}

public void scaliere(int deltaWidth, int deltaHeight){
this.width+=deltaWidth;
this.height+=deltaHeight;
}

public void zeichneRechteck(java.awt.Graphics g){
g.drawRect(x, y, this.width, this.height);
}

public void zeichneString(java.awt.Graphics g) {
g.drawString(this.klick, x, y);

}

}

class WidRechteck extends Frame{
Rechteck rechteck;
Rechteck rechteck2;
Rechteck text;




WidRechteck(){
rechteck= new Rechteck(50, 50, 150, 60);
rechteck2= new Rechteck(50, 50, 200, 110);
text = new Rechteck( 300, 300,"ZusatzInfo");

setSize(600, 400);
//setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
dispose();
System.exit(0);
}
});

}

public void paint(Graphics g){
rechteck.zeichneRechteck(g);
rechteck.scaliere(50, 50);
rechteck.zeichneRechteck(g);
g.setFont(new Font("Times New Romans", Font.BOLD,24));
g.setColor(Color.black);
text.zeichneString(g);

}

public static void main(String[] args){
WidRechteck app = new WidRechteck();

}
}

class ControllerEventHandler implements MouseListener{

protected Graphics g;
String klick = "";

public ControllerEventHandler(Graphics g){
this.g = g;
}

public void mouseReleased(MouseEvent me){
klick = ((Graphics)me.getSource()).toString();
System.out.println("mouseListener");
System.out.println(klick);
}

public void mouseClicked(MouseEvent me){}
public void mouseEntered(MouseEvent me){}
public void mouseExited(MouseEvent me){}
public void mousePressed(MouseEvent me){}
}





public int getX(){

return x;

}

public int getY(){

return y;

}



public void bewege(int deltaX, int deltaY){

this.x+=deltaX;

this.y+=deltaY;

}



public void scaliere(int deltaWidth, int deltaHeight){

this.width+=deltaWidth;

this.height+=deltaHeight;

}



public void zeichne(java.awt.Graphics g){

g.drawRect(x, y, this.width, this.height);

}



}



class WidRechteck extends Frame{

Rechteck rechteck;

Rechteck rechteck2;

private ControllerEventHandler ceh;



WidRechteck(){

rechteck= new Rechteck(50, 50, 150, 60);

rechteck2= new Rechteck(50, 50, 200, 110);

setSize(600, 400);

//setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

dispose();

System.exit(0);

}

});

this.addMouseListener(ceh);

}



public void paint(Graphics g){

rechteck.zeichne(g);

rechteck.scaliere(50, 50);

rechteck.zeichne(g);

g.setFont(new Font("Times New Romans", Font.BOLD,24));

g.setColor(Color.black);

g.drawString("Info", 270, 140);



}



public static void main(String[] args){

WidRechteck app = new WidRechteck();



}

}



class ControllerEventHandler implements MouseListener{



protected Graphics g;

String klick = "";



public ControllerEventHandler(Graphics g){

this.g = g;

}



public void mouseReleased(MouseEvent ev){

klick = ((Graphics)ev.getSource()).toString();

System.out.println(klick);

}



public void mouseClicked(MouseEvent me){}

public void mouseEntered(MouseEvent me){}

public void mouseExited(MouseEvent me){}

public void mousePressed(MouseEvent me){}

}[/CODE]

Ich würde gern verstehen warum die Klick-Benachrichtigung nicht angezeigt werden, kann mir eine helfen?

LG
 

Anhänge

Beste Antwort
Der Code ist etwas wirr und ich weiß auch nicht, ob Du wirklich mit AWT arbeiten willst, aber grundsätzlich musst Du von Deinem Controller schon eine Instanz per new-Operator erzeugen und der Instanzvariablen ceh zuweisen. Ansonsten ist diese null und this.addMouseListener(ceh); fügt eben nicht Deinen Handler hinzu.
Der Code ist etwas wirr und ich weiß auch nicht, ob Du wirklich mit AWT arbeiten willst, aber grundsätzlich musst Du von Deinem Controller schon eine Instanz per new-Operator erzeugen und der Instanzvariablen ceh zuweisen. Ansonsten ist diese null und this.addMouseListener(ceh); fügt eben nicht Deinen Handler hinzu.
 
Beste Antwort
Der Code ist etwas wirr und ich weiß auch nicht, ob Du wirklich mit AWT arbeiten willst, aber grundsätzlich musst Du von Deinem Controller schon eine Instanz per new-Operator erzeugen und der Instanzvariablen ceh zuweisen. Ansonsten ist diese null und this.addMouseListener(ceh); fügt eben nicht Deinen Handler hinzu.
Ich habe ihn Mehrfach für die verschiedene Aufgaben verwendet. Jetzt möchte ich ihn nach dem MVC-Konzept weiterentwickeln. Dein Beitrag war sehr hilfreich, ich habe den Zuweisungsschritt übersehen und brauchte zweite Meinung.

Vielen Dank
 
Da nicht für. Wenn die Frage damit beantwortet ist, könntest Du einen Haken dranmachen, dann sehen andere gleich in der Übersicht, dass das Thema erledigt ist.
 

Zurück
Oben