Guten Tag,
und zwar würde ich gerne ein Bild in meine Form laden,
sobald die Maus über einen bestimmten Bereich im Bild ist soll mir das Programm einen bestimmten Hint einzeigen, der sich auch zur Laufzeit ändert.
Inwieweit kann ich dies umsetzen?
Das Bild in Form laden habe ich bereits, es geht mir hier hauptsächlich darum, wie das Programm in einem bestimmten Bereich einen Hint anzeigt, oder ähnliches.
Und dieses Tooltip kann ich nicht nur auf Objekte anwenden, sondern auch auf bestimmte Bereiche?
Und wenn ja wie geht sowas?
Weil ich bis jetzt tooltips nur beispielsweise auf Buttons angewandt habe.
Oder muss man hier bisschen tricksen und erstellt da ein Panel was eventuell visible false ist und man benutzt dann das als Objekt?
Was sind das den für Objekte Bereiche, bei denen du einen Tooltip haben möchtest? Sind das schon UI-Objekte?
Ansonsten könntest du dir auch etwas eigenes schreiben (MouseListener und wenn der an Position X (bzw grenze links<x<grenze rechts && grenze oben<y<grenze unten) ist, dann einen Tootltip mit Inhalt Y anzeigen)
Und für die Doppelklicks gibt’s [JAPI]MouseListener[/JAPI] bzw. seine leere Default-Implementiereung [JAPI]MouseAdapter[/JAPI], wenn man nicht alle Methoden braucht.
Es ist ein Panel was in ein JFrame geladen wird worauf ein Bild abgelegt ist.
Und von dort aus möchte ich bei bestimmten Bereichen im Bild eine Tooltip nachricht erhalten, welche ich auch zur Laufzeit ändert.
Gut habe mich mal daran versucht, leider funktioniert es nicht, er spuckt mir hierbei Fehlermeldungen aus:
(Habe erst mal nur die Abfrage geschrieben, welche Position die Maus auf dem Fenster hat)
import javax.imageio.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.MouseMotionListener;
public class PicturePanel extends JPanel {
private Image background;
JPanel PicturePanel;
PicturePanel.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent event){
}
public void mouseMoved(MouseEvent event){
System.out.println("Position auf dem Fenster:");
System.out.println("Xrel:"+event.getX() + " Yrel: " + event.getY());
}
});
public PicturePanel() {
super(new GridBagLayout());
try {
background = ImageIO.read(getClass().getResource("background.png"));
}
catch(IllegalArgumentException iae) {
JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!
"+iae.getMessage());
System.exit(-1);
}
catch(IOException ioe) {
JOptionPane.showMessageDialog(this, "Fehler beim Einlesen einer Grafikdatei!
"+ioe.getMessage());
System.exit(-1);
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(background != null) {
g.drawImage(background, 0, 20, this);
}
}
}```
Ja ohne Fehlermeldung ist das helfen schwer, aber was komisch aussieht, ist das du in deiner Klasse PicturePanel welche ja von JPanel erbt noch ein weiteres JPanel hast, was auch wieder PicturePanel heißt (und zwar auch großgeschrieben wie die Klasse)
Dann sollte PicturePanel.addMouseMotionListener(…) in einer Funktion stehen (z.B. deinem Konstruktor) und nicht einfach nur so in der Klasse
Perfekt, funktioniert einwandfrei, dann versuch ich mal das mit dem Bereichen und werde mich sicherlich hier noch mal melden :).
*** Edit ***
Also das mit den Bereichen funktioniert schon mal, er gibt mir korrekt die Korrdinaten aus, wenn ich den Bereich betrete und hört auf wenn ich den Bereich verlasse.
Ich habe mich mal dran versucht, das er beim Klicken in dem Bereich eine Aktion ausführt, leider führt erst gar nicht das Event aus, selbst wenn ich den Bereich nicht gewählt habe, was mache ich falsch? - Fehlermeldungen kommen nicht.
für das Clicken brauchst du einen anderen Listener, der MouseMotionListener ist, wie der Name schon andeuten lässt für Bewegung zuständig. Schau dir für das Pressen mal den hier an MouseListener
mousePressed() ist eine Methode aus [japi]MouseListener[/japi], also nicht aus [japi]MouseMotionListener[/japi].
Du musst also das Panel noch an einem MouseListener registrieren, so, wie du es bereits mit dem MouseMotionListener gemacht hast.