Klick per Maus

Hi,

ich beschäftige mich noch mit einer Java-Klasse namens Klick.

Wenn ich eine HTML-Seite aufrufe und drauf anklicke, erscheint da eine
Meldung, die ausgibt, wie oft ich klicke und so.

Klasse namens Klick, hier:


   java.awt.Label label;
   
   public void init() {

   label=new java.awt.Label("Bisher wurde es nicht geklickt!");
   add(label);
   
   }
   
   public boolean mouseUp(java.awt.Event evt, int x, int y) {

   label.setText("Du hast geklickt - Stelle: x="+x+", y="+y);
   return true;
   }
}```

Jetzt will ich ein neues Fenster dazu anbauen. Wenn ich eine HTML-
Seite aufrufe und drauf anklicke, dann erscheint ein Fenster (als Popup-Fenster), 
indem es gezeigt wird, wie oft (besser gesagt: wie viele) ich geklickt habe. Dies 
Fenster soll vom Applet-Fenster nicht überdeckt werden. 

Wie lautet die Methode? Hat es auch mit "mouseUp" zu tun?
Oder eure Tipps dazu?

Ich hoffe, ihr versteht es, was ich meine. :o

mouseUp() ist aus dem veralteten Event-Handling aus Java 1.02. Das solltest du nicht mehr verwenden, zumal die Methoden des Mouse-Event-Handlings dieser Java-Generation als deprecated gelten.

Statt dessen solltest du die Methoden des Event-Handlings (Delegation-Modell) welches seit Java 1.1 dabei ist, benutzen.

Für Buttons und MenuItems ist das die actionPerformed()-Methode aus java.awt.event.ActionListener.
Für andere Komponenten, die auf Mausklicks hören sollen, sind das die Methoden aus java.awt.event.MouseListener bzw. MouseMotionListener.

Quellcode-Beispiele findest du hier auch im Forum.

[QUOTE=L-ectron-X]
Statt dessen solltest du die Methoden des Event-Handlings (Delegation-Modell) welches seit Java 1.1 dabei ist, benutzen.[/QUOTE]
Zum Beispiel, hier: http://www.addison-wesley.de/service/Krueger/kap18001.htm
Dann soll drin sein:
mouseClicked - Eine Maustaste wurde gedrückt und wieder losgelassen.
mouseEntered - Der Mauszeiger betritt die Komponente.
mouseExited - Der Mauszeiger verläßt die Komponente.
mousePressed - Eine Maustaste wurde gedrückt.
mouseReleased - Eine Maustaste wurde losgelassen.

Wenn das Fenster geöffnet wird, nach dem wenn man eine HTML-Seite
aufruft, hier:
windowOpened

Für Buttons und MenuItems ist das die actionPerformed()-Methode aus java.awt.event.ActionListener.

Ich will im Fenster kein Buttons aufstellen. Drin soll ähnlich wie ein Protokoll sein.

Für andere Komponenten, die auf Mausklicks hören sollen, sind das die Methoden aus java.awt.event.MouseListener bzw. MouseMotionListener.

Wie oben geschrieben!

Quellcode-Beispiele findest du hier auch im Forum.

Oh, wo stehen sie denn da? Da stehen sie auch unter java-forum.de, wobei
es mir zu überflüssig ist, weil das mich durcheinander bringt bzw. macht.
Deshalb stelle ich hier eine Frage! Naja…

Mein Kopf blüht gerade!

Drin soll ähnlich wie ein Protokoll sein. Das soll ein “Frame” sein.
Eine HTML-Seite - es soll “Applet” sein.

Wenn ich eine HTML-Seite aufrufe, erscheint es wie folgt:
Applet - auf der HTML-Seite und
Fenster (als Frame) - im Bildschirm
Diese beide sollen parallel kommen.
Wenn ich auf der HTML-Seite egal wo klicke, dann wird es im
Fenster (Frame) protokolliert, das heißt, wie oft ich klicke usw.

Wißt Ihr, was ich meine? :o

lehn mich ein bisschen ausm Fenster mit halbwissen, aber afaik ist das nicht loesbar, da mouseXXX (welche methode auch immer) nur im aktiven Applet reagiert, wenn das Applet irgendwo am Bildschirm haengt und, weil du auf der HTML seite bist, nicht mal den Fokus besitzt, so koennen die clicks nicht registriert werden… generell nicht

[QUOTE=yampi]
Wenn ich auf der HTML-Seite egal wo klicke, dann wird es im
Fenster (Frame) protokolliert, das heißt, wie oft ich klicke usw.[/QUOTE]
Es ist so, wie deathbyaclown geschrieben hat. Es können nur MouseEvents verarbeitet werden, wenn auf Komponenten geklickt wurde, an denen Listener lauschen.
(Also Komponenten, an denen du bspw. mit addMouseListener() oder mit addActionListener() auf entsprechende Ereignisse lauschen möchtest.)

In deinem Fall müsstest du also auf das Applet klicken, damit im Frame etwas angezeigt werden kann.

Hier mal noch Code zum Testen.

Die Applet-Klasse:```import javax.swing.;
import java.awt.
;
import java.awt.event.;
import java.util.
;

public class MyApplet extends JApplet implements MouseListener {
private Random r = new Random();
private MyFrame f = new MyFrame();

public void init() {
addMouseListener(this);
}

public void mouseClicked(MouseEvent e) {
getContentPane().setBackground(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
f.setClick();
}

public void mouseEntered(MouseEvent e) {
f.setVisible(true);
}

public void mouseExited(MouseEvent e) {
f.setVisible(false);
}

public void mousePressed(MouseEvent e) { }

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

Der JFrame:```import javax.swing.*;

public class MyFrame extends JFrame {
private JLabel l = new JLabel();
private int i;

public MyFrame() {
super(“Klickzähler”);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
l.setHorizontalAlignment((int)JLabel.CENTER_ALIGNMENT);
add(l);
}

public void setClick() {
l.setText(String.valueOf(i++));
}
}```

und die HTML-Seite:

<html>
  <head>
    <title>Klick-Applet</title>
  </head>
  <body>
    <applet code="MyApplet.class" width="500" height="500">
    </applet>
  </body>
</html>

Das probiere ich mal aus. Wie das sich ergibt, melde ich mich dann.