Hinzufügen mouseListener zu meinem Objekt in java
Ich versuche, mich ein applet, das kann ich einfach ziehen Sie ein Bild. Und ich will image-Objekt zu hören Veranstaltungen. So, hier ist das applet-code, die einfach die Ausführung in einer thread:
import java.awt.*;
import java.net.URL;
import javax.swing.JApplet;
public class Client extends JApplet implements Runnable {
private static final long serialVersionUID = 1L;
MediaTracker mediaTracker;
Image [] imgArray;
Tas t1;
public void init()
{
mediaTracker = new MediaTracker(this);
imgArray = new Image[1];
URL base = getCodeBase();
imgArray[0] = getImage(base,"okey.png");
mediaTracker.addImage(imgArray[0],1);
try {
mediaTracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
t1 = new Tas(this, new Rectangle(0, 0, imgArray[0].getWidth(this), imgArray[0].getHeight(this)), imgArray[0]);
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g)
{
t1.paint(g);
}
@Override
public void run() {
while(true){
//System.out.println("run");
repaint();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Und die Klasse des Objekts, das hält Bild:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Movable extends JPanel implements MouseListener {
public Client mainObj;
public Rectangle rect;
public Image image;
public Movable(Client mainObj, Rectangle rect, Image image) {
this.mainObj = mainObj;
this.rect = rect;
this.image = image;
addMouseListener(this);
}
public void paint(Graphics g) {
g.drawImage(image, rect.x, rect.y, rect.width, rect.height, this);
}
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("clicked");
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
System.out.println("pressed");
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
@SuppressWarnings("serial")
class Tas extends Movable{
public String name = "";
public Tas(Client mainObj, Rectangle rect, Image image) {
super(mainObj, rect, image);
}
}
Kann ich sehen, dass das Bild in meinem applet, aber es passiert nichts wenn ich auf in oder aus dem Bild heraus. Also, was ist falsch mit diesem code.
InformationsquelleAutor dhalsim | 2009-07-15
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter der Annahme, dass Tas in code #1 ist Beweglich in code #2...
Du eigentlich gar nicht verwenden das Bewegliche als eine Komponente, sondern stattdessen Fragen Sie, es zu malen, sich selbst auf die Applet-graphics-Kontext, hier:
Stattdessen sollten Sie fügen Sie eine Instanz von Beweglichen, auf die Applet-container, wobei die Malerei wird automatisch, und es wird beginnen, zu empfangen, Maus-events. Sie können auch entfernen, die paint () - Methode dann auch.
InformationsquelleAutor banjollity
Zunächst einmal sollten Sie nie überschreiben der paint-Methode von einem top-level container (JApplet, JFrame, JDialog).
Dann zu tun, custom-painting auf andere Swing-Komponenten, die Sie überschreiben der paintComponent () - Methode der Komponente, NICHT die paint () - Methode. Lesen Sie die Swing-tutorial auf Custom Painting. Also erstmal die Probleme beheben.
Ich bin mir nicht sicher, was der Sinn des Threads ist, sondern entfernen Sie es aus dem code, bis Sie lösen Ihre anderen Probleme. Wenn Sie versuchen, zu tun, animation, dann sollten Sie mit einem Swing Timer, nicht Thread.
Wenn Sie möchten, um zu sehen, einige code für das ziehen von Komponenten können Sie einen Blick auf Das Verschieben Von Fenstern für einige generische code.
InformationsquelleAutor camickr
Dies ist eine funktionierende Lösung. Ist es nicht ein applet, aber Sie können leicht umwandeln, die. Hoffe es hilft :
InformationsquelleAutor Savvas Dalkitsis
Ist die einfache Antwort - Sie haben keine code nichts zu tun in mousePressed() oder mouseReleased().
Es gibt viele andere Probleme in dem code aber...
Einfachste Lösung, die ich gefunden habe -
InformationsquelleAutor Nate