mouseEntered mit einem Bild im Applet

Status
Nicht offen für weitere Antworten.

Schinken

Mitglied
hallo,

ist es möglich mit mouseEntered zu prüfen ob die Maus über einem Bild (Menupunkt "Spiel starten") ist und daraufhin ein anderes bild an die stelle lädt. also sowas wie bei javascript Mouseover. ich hab schon mal folgenden Code vorbereitet. vielleicht kann mir jemand ein tipp geben. bei google hab ich auch kein richtiges beispiel oder tutorial gefunden.


Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Projekt extends Applet implements MouseMotionListener, MouseListener
{
  Image backImage;
  Image Menu1;
  Image Menu2;
  private TextField tf;

  public void init()
  {
    backImage = getImage (getCodeBase (), "land.jpg");
    Menu1 = getImage(getCodeBase(), "Menu1.gif");
    Menu2 = getImage(getCodeBase(), "Menu2.gif");

    tf = new TextField (30);
    this.add ("South", tf);
    this.addMouseMotionListener(this);     //ich kriegs nur hin das er merkt ob die maus im applet hin aber obs
    this.addMouseListener(this);              //über dem Bild ist nicht.
  }

  public void start(){}
  public void stop(){}
  public void destroy(){}

  public void paint (Graphics g)
  {
     g.drawImage (backImage, 0, 0, this);
     g.drawImage(Menu1, 50, 60, this);
  }

  public void mouseDragged (MouseEvent e){}
  public void mouseMoved (MouseEvent e) {}
  public void mouseClicked (MouseEvent e) {}
  public void mouseEntered (MouseEvent e)
  {
    String s = "Die Maus ist im sensitiven Bereich.";
    tf.setText (s);
  }

  public void mouseExited (MouseEvent e)
  {
    String s = "Die Maus ist abgehauen!";
    tf.setText (s);
  }

  public void mousePressed (MouseEvent e) {}
  public void mouseReleased (MouseEvent e) {}
}
 

L-ectron-X

Gesperrter Benutzer
Mach das am besten mit der mouseMoved()-Methode.
Stelle dann immer fest, wo sich die Maus befindet.
Die Koordinaten deiner Grafik kennst du ja. Wenn sie sich mit der Mausposition deckt...
So weit klar?
 

Schinken

Mitglied
g.drawImage(Menu1, 50, 60, this);

meinst du diese Koordinaten?

edit: soll ich die koordinaten in der init methode vergleichen mit einer schleife? oder denk ich wieder kompliziert?
 

L-ectron-X

Gesperrter Benutzer
Mal ein passendes Beispiel, welches du so in deinem Code ausprobieren kannst:
Java:
//zu den Instanzvariablen
private int xPos = 50, yPos = 60; //Bildkoordinaten

//in die init()-Methode
addMouseMotionListener(new MouseMotionAdapter() {
   public void mouseMoved(MouseEvent e) {
      if(e.getX() > xPos && e.getY() > yPos &&
         e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight()) {
            System.out.println("Die Maus befindet sich über Menu1");
      }
   }
});

//die paint()-Methode
public void paint(Graphics g) {
   g.drawImage (backImage, 0, 0, this); 
   g.drawImage(Menu1, xPos, yPos, this); 
}

Ich hoffe, ich hab jetzt nix verkehrt gemacht.
Probiers mal aus.
 

Schinken

Mitglied
irgendwie kann ich den mittleren init teil nicht entschlüsseln. ich glaub da ist ein syntax fehler. jedenfalls hab ich das bei mir rumprobiert aber krieg beim kompilieren fehler.

edit: bin noch am anfang von java und entschuldige mich dafür das ich vielleicht einfache sachen nicht sehe.
 

Schinken

Mitglied
Projekt.java:25: getWidth(java.awt.image.ImageObserver) in java.awt.Image cannot be applied to ()
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
Projekt.java:25: operator + cannot be applied to int,java.awt.Image.getWidth
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
Projekt.java:25: operator < cannot be applied to int,<nulltype>
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
Projekt.java:25: cannot find symbol
symbol : method getHeight()
location: class java.awt.Menu
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
Projekt.java:25: operator + cannot be applied to int,java.awt.Menu.getHeight
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
Projekt.java:25: operator < cannot be applied to int,<nulltype>
if(e.getX() > xPos && e.getY() > yPos && e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight())
^
6 errors


Code:
//in die init()-Methode
addMouseMotionListener(new MouseMotionAdapter() {
   public void mouseMoved(MouseEvent e) {
      if(e.getX() > xPos && e.getY() > yPos &&
         e.getX() < xPos + Menu1.getWidth() && e.getY() < yPos + Menu.getHeight()) {
            System.out.println("Die Maus befindet sich über Menu1");
      }
   }
});  //<<<--- muss das so???
 

L-ectron-X

Gesperrter Benutzer
Einerseits wurde eine Variable nicht initialisiert, anderseits befinden wir uns in einer inneren Klasse.

<<<--- muss das so???
Muss nicht, aber weil ich innerhalb einer Methode die mouseMoved() aus MouseMotionAdapter überschreibe.
Man spricht hier von einer anonymen Klasse, weil keine Referenz erzeugt wird.
Wenn du mal die Klammernpaare zusammensetzt, wirst du sehen, dass es so passt.
Ich spare mir so die Implementierung von leeren Methoden der Listener-Interfaces.

Ich schreibe mal ein fertiges Beispiel-Applet...
 

Schinken

Mitglied
ich hab da ein bisschen rumprobiert. wenn ich die größe des bildes manuell eingebe ohne menu1.weidht und height dann geht das applet.
 

Schinken

Mitglied
sry für die vielen posts. hab aber das applet nun hingekriegt. jetzt hab ich das problem das das applet flüssig im javaeditor läuft aber sobald ich es online stelle bleibt er beim 2 menu bild stehen. also die schrift wird blau aber nicht wieder rot wenn ich mit der maus weggehe.
 

L-ectron-X

Gesperrter Benutzer
Sorry, hatte in den letzten Tagen ziemlich viel um die Ohren, kann dir erst jetzt antworten.
Heute Nachmittag stelle ich mal ein Beispiel-Applet samt Code online.
 

L-ectron-X

Gesperrter Benutzer
:arrow: Applet anzeigen

Beispiel-Applet: Wegweiser
Das Applet realisiert eine ImageMap mit MouseOver-Effekt. Um flackerfreies Zeichnen zu demonstrieren wurde zusätzlich Double Buffering (Doppelpufferung) verwendet. Außerdem wird auch gezeigt, wie eine andere Webseite aus einem Applet heraus geladen werden kann.

Der Code des Applets sieht so aus:
Java:
/* Beispiel-Applet: Wegweiser
 * Das Applet realisiert eine ImageMap mit MouseOver-Effekt.
 * Um flackerfreies Zeichnen zu demonstrieren wurde zusätzlich
 * Doublebuffering (Doppelpufferung) verwendet.
 */

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

public class Wegweiser extends Applet {
  private Graphics offscreenGraphics; //Puffer
  private Image offscreenImage; //Offscreen-Image
  private Image[] images = new Image[5]; //Behälter für Bilder
  private TextField text; //für Textausgaben
  private boolean overGoogle, overForum, operaInit;
  private int googleXPos = 129, googleYPos = 237; //Bildposition
  private int forumXPos = 328, forumYPos = 167; //Bildposition
  private int appletHeight, appletWidth; //Dimension des Applets
  private MediaTracker tracker; //zur Überwachung des Ladens der Bilder
  private String forum = "http://www.java-forum.org";
  private String google = "http://www.google.de";

  /* Initialisieren des Applets */
  public void init() {
    appletHeight = this.getSize().height;
    appletWidth = this.getSize().width;
    tracker = new MediaTracker(this);
    offscreenImage = this.createImage(appletWidth, appletHeight);
    offscreenGraphics = offscreenImage.getGraphics();
  
    loadImages();

    text = new TextField(50);
    text.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        showWebDocument(text.getText().trim());
      }
    });
    this.add(text);
    
    addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseMoved(MouseEvent e) {
        //Maus ist über der Google-Grafik
        if(e.getX() > googleXPos && e.getY() > googleYPos && //linke obere Ecke
          e.getX() < images[1].getWidth(Wegweiser.this)+googleXPos &&
          e.getY() < images[1].getHeight(Wegweiser.this)+googleYPos) {

          if(!overGoogle) { //Nur neuzeichenen wenn nötig
            overGoogle = true;
            repaint();
            text.setText(google);
          }
        }
        else {

          if(overGoogle) { //Nur neuzeichenen wenn nötig
            overGoogle = false;
            repaint();
          }
        }
        
        //Maus ist über der Forum-Grafik
        if(e.getX() > forumXPos && e.getY() > forumYPos && //linke obere Ecke
          e.getX() < images[2].getWidth(Wegweiser.this)+forumXPos &&
          e.getY() < images[2].getHeight(Wegweiser.this)+forumYPos) {

          if(!overForum) { //Nur neuzeichenen wenn nötig
            overForum = true;
            repaint();
            text.setText(forum);
          }
        }
        else {

          if(overForum) { //Nur neuzeichenen wenn nötig
            overForum = false;
            repaint();
          }
        }
      }
    });

    addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        if(overGoogle) {
          showWebDocument(google);
        }

        else if(overForum) {
          showWebDocument(forum);
        }
      }
    });
  }
  
  public void start() {
    //Bilder sind geladen -> (neu)zeichnen!
    repaint();
  }
  
  /* Bilder laden */
  private void loadImages() {
    images[0] = getImage(getCodeBase(), "background.jpg");
    images[1] = getImage(getCodeBase(), "google_off.jpg");
    images[2] = getImage(getCodeBase(), "java-forum_off.jpg");
    images[3] = getImage(getCodeBase(), "google_on.jpg");
    images[4] = getImage(getCodeBase(), "java-forum_on.jpg");

    for(int i = 0; i < images.length; i++) {
      tracker.addImage(images[i], 0);
    }
    
    try {
      tracker.waitForID(0);
    }
    catch(InterruptedException e) {
      e.printStackTrace();
    }
  }
  
  /* Webseite laden */
  private void showWebDocument(String url) {
    try {
      getAppletContext().showDocument(new URL(url), "_blank");
    }
    catch(MalformedURLException murle) {
      text.setText("URL fehlerhaft oder nicht erreichbar!");
    }
  }

  /* Ältere Versionen von Opera haben Schwierigkeiten beim Start von Applets mit Doublebuffering.
   * Daher wird für den Opera nach Applet-Initialisierung ein Startzustand
   * gezeichnet, um ein leeres Applet nach dem Start zu vermeiden.
   */
  private void operaInit() {
    offscreenGraphics.drawImage(images[0], 0, 0, this);
    offscreenGraphics.drawImage(images[1], googleXPos, googleYPos, this);
    offscreenGraphics.drawImage(images[2], forumXPos, forumYPos, this);
    operaInit = true;
  }

  /* Bild im Hintergrund (Speicher) zusammensetzen
  update() ist die Reaktion auf repaint() */
  public void update(Graphics g) {
    offscreenGraphics.drawImage(images[0], 0, 0, this);
    
    if(overGoogle) {
      offscreenGraphics.drawImage(images[3], googleXPos, googleYPos, this);
      offscreenGraphics.drawImage(images[2], forumXPos, forumYPos, this);
    }

    else if(overForum) {
      offscreenGraphics.drawImage(images[1], googleXPos, googleYPos, this);
      offscreenGraphics.drawImage(images[4], forumXPos, forumYPos, this);
    }
    
    else {
      offscreenGraphics.drawImage(images[1], googleXPos, googleYPos, this);
      offscreenGraphics.drawImage(images[2], forumXPos, forumYPos, this);
    }

    g.drawImage(offscreenImage, 0, 0, this); //Offscreen-Image auf den Screen kopieren
  }
  
  public void paint(Graphics g) {
    if(!operaInit)
      operaInit();

    if(offscreenImage != null)
      g.drawImage(offscreenImage, 0, 0, this);
  }
}
 
Zuletzt bearbeitet:

Schinken

Mitglied
danke, finde das applet sieht echt gut aus.sieht aber bisschen komplex aus :roll: . ich kann ja mal meins posten

Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class Projekt extends Applet implements MouseMotionListener, MouseListener
{
  Image backImage;
  Image Menu1, Menu2, Menu3, Menu4;
  private int xPos = 50, yPos = 60;
  private Image dbImage;
  private Graphics dbg;

  public void init()
  {
    backImage = getImage (getCodeBase (), "land.jpg");
    Menu1 = getImage(getCodeBase(), "Menu1.gif");
    Menu2 = getImage(getCodeBase(), "Menu3.gif");

    this.addMouseMotionListener(this);
    //this.addMouseListener(this);

  }

  public void start(){}
  public void stop(){}
  public void destroy(){}

  public void paint (Graphics g)
  {
     g.drawImage(backImage, 0, 0, this);
     g.drawImage(Menu1, xPos, yPos, this);
     g.drawImage(Menu2, 100, 130, this);
  }

  public void mouseDragged (MouseEvent e){}
  
  public void mouseMoved (MouseEvent e)
  {
   if(e.getX() > xPos && e.getY() > yPos &&
         e.getX() < xPos + 198 && e.getY() < yPos + 43)
   {
     Menu1 = getImage(getCodeBase(), "Menu2.gif");
     repaint();
   } else {
     Menu1 = getImage(getCodeBase(), "Menu1.gif");
     repaint();
   }
   
   if(e.getX() > 100 && e.getY() > 130 &&
         e.getX() < 100 + 85 && e.getY() < 130 + 20)
   {
     Menu2 = getImage(getCodeBase(), "Menu4.gif");
     repaint();
   } else {
     Menu2 = getImage(getCodeBase(), "Menu3.gif");
     repaint();
   }
  }
  
  public void update (Graphics g)
  {
    // Initialisierung des DoubleBuffers
    if (dbImage == null)
    {
      dbImage = createImage (this.getSize().width, this.getSize().height);
      dbg = dbImage.getGraphics ();
    }

    // Bildschirm im Hintergrund löschen
    dbg.setColor (getBackground ());
    dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

    // Auf gelöschten Hintergrund Vordergrund zeichnen
    dbg.setColor (getForeground());
    paint (dbg);

    // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
    g.drawImage (dbImage, 0, 0, this);
  }
  
  public void mouseClicked (MouseEvent e){}
  public void mouseEntered (MouseEvent e){}
  public void mouseExited (MouseEvent e){}
  public void mousePressed (MouseEvent e){}
  public void mouseReleased (MouseEvent e){}
}
 

Schinken

Mitglied
kommt das nächste problem. wenn ich auf den button klicke dann soll im applet das spiel weiter (Spiel starten) geführt werden. Wie wäre das am besten zu lösen?
 

L-ectron-X

Gesperrter Benutzer
Du könntest ganz einfach eine neue Seite laden lassen mit dem Spiel-Applet darin.
Ansonsten müsstest du die Appletfläche löschen und dann das Spiel darauf zeichnen.
 

Schinken

Mitglied
kann man nicht das alte applet schließen ohne das browser fenster schließen zu müssen und ein neues applet in dem fenster laden. bitte die methode dafür posten wenns geht. danke im vorraus.
 

L-ectron-X

Gesperrter Benutzer
Um diesen Thread noch abzuschließen:
Java:
getAppletContext().showDocument(new URL(url), "_self");
getAppletContext() besorgt den AppletContext, auf dem dessen Methode showDocument() die Webseite mit dem Applet ins gleiche Browser-Fenster läd.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I In Applet bei mouseEntered() neues Fenster öffnen Tools - Maven, Gradle, Ant & mehr 8
M javafx wird in einem alten programm nicht bei maven gefunden Tools - Maven, Gradle, Ant & mehr 15
W Buendeln von jar und ear in einem Projekt Tools - Maven, Gradle, Ant & mehr 3
JWK Kann ich mit einem Scanner eine Datei mehrmals lesen? Tools - Maven, Gradle, Ant & mehr 3
pkm Wie log4j in einem mvn-basierten Projekt einbinden? Tools - Maven, Gradle, Ant & mehr 2
4 Hilfe bei einem BB Code formatierer Tools - Maven, Gradle, Ant & mehr 4
S .jars in einem Ornder automatisch laden lassen Tools - Maven, Gradle, Ant & mehr 2
musiKk Maven Verwendung von commons-configuration in einem OSGi-Bundle Tools - Maven, Gradle, Ant & mehr 6
M Repository und Integrationsumgebung auf einem Server Tools - Maven, Gradle, Ant & mehr 5
E Webstart Laden von Tiff-Bildern als BufferedImage und TFW aus einem JAR Tools - Maven, Gradle, Ant & mehr 3
S Problem bei Nutzung einer eigenen EJB in einem Servlet Tools - Maven, Gradle, Ant & mehr 2
E Verzögerung beim Refresh (F5) mit einem Applet verursachen Tools - Maven, Gradle, Ant & mehr 16
S Fehler in einem Upload - Applet (nicht gelöst!!) Tools - Maven, Gradle, Ant & mehr 2
G Vigenere Verschlüsselung mit einem Applet Tools - Maven, Gradle, Ant & mehr 1
A Mit einem Applet eine txt-Datei einlesen und ausgeben. Tools - Maven, Gradle, Ant & mehr 6
S aus einem JApplet ein Image in separatem JFrame anzeigen Tools - Maven, Gradle, Ant & mehr 10
H HTML Seiten in einem Applet anzeigen Tools - Maven, Gradle, Ant & mehr 2
M Animation auf einem Hintergrundbild Tools - Maven, Gradle, Ant & mehr 10
J In einem Bean zugriff auf ein SessionBean? Tools - Maven, Gradle, Ant & mehr 6
H Ärger mit einem Chat Tools - Maven, Gradle, Ant & mehr 6
G Problem mit dem schreiben von Datein auf einem Server Tools - Maven, Gradle, Ant & mehr 11
D Problem bei der Ausgabe in einem Applet Tools - Maven, Gradle, Ant & mehr 3
H Open Dialog in einem Applet Tools - Maven, Gradle, Ant & mehr 2
D Größe eines jpeg's in einem Java-Applet ändern ? Tools - Maven, Gradle, Ant & mehr 7
J Email an mehrere Empfänger aus einem Applet abschicken Tools - Maven, Gradle, Ant & mehr 4
J Memberbereich in einem Java Applet ? Tools - Maven, Gradle, Ant & mehr 5
G Unerwünschte Applet-Fußzeile bei einem JPopupMenu Tools - Maven, Gradle, Ant & mehr 6
thE_29 Vom Applet aus einem HTML Button Focus geben Tools - Maven, Gradle, Ant & mehr 4
M Eine Datei lesen mit einem Applet (gleicher Server) Tools - Maven, Gradle, Ant & mehr 2
F Ein Bild in einem Applet anzeigen? Tools - Maven, Gradle, Ant & mehr 2
M Textausgabe in einem Applet Tools - Maven, Gradle, Ant & mehr 7
G Bild in einem TextField oder TextArea? Tools - Maven, Gradle, Ant & mehr 3
D Frame oder JFrame von einem Applet aus starten Tools - Maven, Gradle, Ant & mehr 10
B Farbe eines Pixels in einem Applet Tools - Maven, Gradle, Ant & mehr 4
M ein aus einem JApplet gestartetes JFrame schliessen Tools - Maven, Gradle, Ant & mehr 6
K Bild (jpg) in einem JApplet Tools - Maven, Gradle, Ant & mehr 2
G Kann Pfad zu einem Image auf dem Webserver nicht angeben Tools - Maven, Gradle, Ant & mehr 2
E Seite per Applet in einem bestimmten Frame öffnen Tools - Maven, Gradle, Ant & mehr 2
S Aus einem Applet grafische Fenster bzw. Dialoge öffnen Tools - Maven, Gradle, Ant & mehr 21
D Applet aus einem Agenten heraus aufrufen Tools - Maven, Gradle, Ant & mehr 2
D problem beim auslesen von text aus einem textfeld... Tools - Maven, Gradle, Ant & mehr 15
D Anzeige eines Bildes in einem Applet Tools - Maven, Gradle, Ant & mehr 2
S Probleme mit einem Applet Tools - Maven, Gradle, Ant & mehr 2
M Textdatei von einem Server, innerhalb eines Applets, lesen Tools - Maven, Gradle, Ant & mehr 4
H Applet drawImage gibt falsches bild aus Tools - Maven, Gradle, Ant & mehr 6
N Bild schieben via Drag 'n Drop ist zu schnell! Tools - Maven, Gradle, Ant & mehr 6
G Bild wird in Applet nicht angezeigt! Tools - Maven, Gradle, Ant & mehr 6
C Mein Applet zeigt mein Bild im Internet nicht an Tools - Maven, Gradle, Ant & mehr 2
H Borderlayout und Bild in Applet einfügen Tools - Maven, Gradle, Ant & mehr 4
F Bild speichern Tools - Maven, Gradle, Ant & mehr 4
K Applet mit mehreren Paketen und Bild/Ton-Ordnern in Browser Tools - Maven, Gradle, Ant & mehr 2
U Live-Bild wird im Browser nicht aktualisiert Tools - Maven, Gradle, Ant & mehr 21
G bild öffnen mit BufferedImage Tools - Maven, Gradle, Ant & mehr 4
D Runnable JApplet mit Bild/Ovals "übermalt" Buttons Tools - Maven, Gradle, Ant & mehr 6
F Warum wird das Bild nicht angezeigt? Tools - Maven, Gradle, Ant & mehr 9
F Bild über Applet aussuchen und auf Serverladen Tools - Maven, Gradle, Ant & mehr 14
K Bild auf JButton in Applet, JButton wir aber net angezeigt? Tools - Maven, Gradle, Ant & mehr 7
M Applet soll Bild übertragen Tools - Maven, Gradle, Ant & mehr 9
J Bild in Array einlesen Tools - Maven, Gradle, Ant & mehr 13
T Mit Applet Bild von einer anderen HP darstellen Tools - Maven, Gradle, Ant & mehr 28
S Access Denied beim Bild laden Tools - Maven, Gradle, Ant & mehr 7
K Java Lade - Bild ändern Tools - Maven, Gradle, Ant & mehr 9
D sich bewegendes bild + timer Tools - Maven, Gradle, Ant & mehr 6
B Bild Tools - Maven, Gradle, Ant & mehr 2
G Bild im Applet laden und ausgeben Tools - Maven, Gradle, Ant & mehr 2
J Screenshot to Form / Clipboard Bild übertragen Tools - Maven, Gradle, Ant & mehr 2
Z java-puzzel lädt bild nicht Tools - Maven, Gradle, Ant & mehr 3
J Bild als Hintergrund Tools - Maven, Gradle, Ant & mehr 24
S Problem: Bild im Applet wird 3-4 Mal geladen Tools - Maven, Gradle, Ant & mehr 5

Ähnliche Java Themen

Neue Themen


Oben