Bild Mauslistener zuweisen

Hollafuchs

Grünschnabel
Ich lasse mir diverse Bilder in einem JTabbedPane Reiter zeichnen, dafür rufe ich folgendes Programm aus dem Hauptprogramm auf.


import java.awt.*;
import javax.swing.*;

public class BildTest extends JPanel
{
private Image img;

public void paint(Graphics g)
{
img = getToolkit().getImage("logo.gif");

g.drawImage(img,50,50,this);
}
}


Ich hätte jetzt gerne das wenn ich über das Bild gehe ein Text unter dem Mauszeiger erscheint und bei einem Mausklick auf das Bild sich ein Label ändert, daher meine Fragen

1. kann man einem Bild direkt einen Mauslistener zuweisen ? hab das bisher nur über Koordinaten gefunden und das ist ja recht aufwendig

2. wie kann man so einen Text unter der Maus erscheinen lassen ?
 
Die Klasse MouseAdapter mit ihren Methoden mouseEntered, mouseExited und mouseClicked sollte das richtige für Dich sein.
Und für die Darstellung von Informationen kannst Du vielleicht einen Tooltip benutzen, siehe setTooltipText.
 
Zuletzt bearbeitet:
den MouseListener benutze ich bereits für Panels, da klappt das auch. Leider kann man dem Mouse Listener aber kein Image zuweisen, also folgendes geht leider nicht

Image img;
WachKatze1 wk1 = new WachKatze1();
img.addMouseListener(wk1);




meine MouseListener Klasse sieht foglender maßen aus:



import java.awt.event.*;
import javax.swing.SwingUtilities;

public class WachKatze1 extends MouseAdapter{




public WachKatze1(){

}

public void mouseEntered(MouseEvent e){

}

public void mouseExited(MouseEvent e){


}

public void mousePressed(MouseEvent e){

if(SwingUtilities.isLeftMouseButton(e))
{
System.out.println("test");


}
if(SwingUtilities.isMiddleMouseButton(e))
{
System.out.println("test");

}
if(SwingUtilities.isRightMouseButton(e))
{
System.out.println("test");


}


}
}
 
Wieso machst du es denn nciht einfach mit Koordinaten? So aufwendig ist das doch gar nicht. Du musst ja nur einen Bereich markieren(Die Maße des Bildes + den Startpunkt) und schon kannst du los legen;)
 
Wieso machst du es denn nciht einfach mit Koordinaten? So aufwendig ist das doch gar nicht. Du musst ja nur einen Bereich markieren(Die Maße des Bildes + den Startpunkt) und schon kannst du los legen;)

weil das oben nur ein beispiel war das wird nicht bei einem Bild bleiben sondern das werden dutzende, das ganze wird dazu dienen ein Netzwerk aufzubauen und jeder knoten ist sein eigenes bild mit massen an informationen, es steht im vornherein nicht fest wieviele knoten/bilder es gibt und es soll dynamisch generiert werden, da wird das mit den Koordinaten glaub doch recht aufwendig
 
Hm, ok, da gebe ich dir Recht^^
Aber gibt es nicht auch eine Methode um zu ermitteln, was unter dem Cursor liegt? Damit könnte dir vll geholfen sein, bin mir aber nicht ganz sicher ob es das in Java gibt.
 
Achso. Dann fällt mir außer selbstberechneten Koordinaten auch nichts ein. Vielleicht hilft Dir eine externe Graphenlibrary weiter.
 
Machs doch so in der Art:

Java:
public static void main(String[] args) {
		// Create and set up the window.
		JFrame frame = new JFrame("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(200, 200);
		frame.setLayout(null);
		frame.setExtendedState(Frame.MAXIMIZED_BOTH);

		ImagePanel imagePanel = new ImagePanel(new File("test.png"));
		imagePanel.setBackground(Color.RED);
		imagePanel.setToolTipText("test.png");

		frame.add(imagePanel);

		frame.setVisible(true);

	}

	public static class ImagePanel extends JPanel {

		private BufferedImage image;

		public ImagePanel(File f) {
			try {
				image = ImageIO.read(f);
				int width = image.getWidth( );
				int height = image.getHeight( );

				this.setMaximumSize(new Dimension(width, height));
				this.setSize(width, height);
				this.setToolTipText(f.getAbsolutePath( ));

				this.addMouseListener(new MouseAdapter( ) {

					@Override
					public void mouseClicked(MouseEvent evt) {
						System.out.println("Mouse clicked");
					}

				});
			}
			catch (IOException e) {
				e.printStackTrace( );
			}

		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (image != null) {
				g.drawImage(image, 0, 0, this);
			}
		}
	}
 
Machs doch so in der Art:

Java:
public static void main(String[] args) {
		// Create and set up the window.
		JFrame frame = new JFrame("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(200, 200);
		frame.setLayout(null);
		frame.setExtendedState(Frame.MAXIMIZED_BOTH);

		ImagePanel imagePanel = new ImagePanel(new File("test.png"));
		imagePanel.setBackground(Color.RED);
		imagePanel.setToolTipText("test.png");

		frame.add(imagePanel);

		frame.setVisible(true);

	}

	public static class ImagePanel extends JPanel {

		private BufferedImage image;

		public ImagePanel(File f) {
			try {
				image = ImageIO.read(f);
				int width = image.getWidth( );
				int height = image.getHeight( );

				this.setMaximumSize(new Dimension(width, height));
				this.setSize(width, height);
				this.setToolTipText(f.getAbsolutePath( ));

				this.addMouseListener(new MouseAdapter( ) {

					@Override
					public void mouseClicked(MouseEvent evt) {
						System.out.println("Mouse clicked");
					}

				});
			}
			catch (IOException e) {
				e.printStackTrace( );
			}

		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (image != null) {
				g.drawImage(image, 0, 0, this);
			}
		}
	}

Vielen Lieben Dank das klappt wunderbar = )
 
Dachte, Du möchtest mehrere Bilder auf ein Panel zeichnen? So wird ja nur ein Klick aufs Panel registriert, nicht auf eventuell enthaltene Bilder.
 
Zurück