einzelne Elemente in JList mit MouseEvent anzeigen

BlockeR

Erfahrenes Mitglied
hi,
bin neu hier angemeldet und grüße euch alle zuerst einmal. Habe in hier schon ne ganze menge gefunden aber leider nicht das was ich diesmal suche.

Ich habe eine JList die mit Werten gefüllt ist und möchte das, wenn ich mit der maus auf ein Element zeige(also mit mouseEntered), mir das element ausgegeben wird. Am besten in eine String Variable.

Könnt ihr mir helfen?
 
Hi,

so könntest Du das machen:

Java:
String	listData[] =
		{
			"Eintrag 1",
			"Eintrag 2",
			"Eintrag 3",
			"Eintrag 4"
		};

		final JList list = new JList( listData );


    	list.addMouseMotionListener(new MouseAdapter() {
    	public void mouseMoved(MouseEvent me) {
	    	Point p = new Point(me.getX(),me.getY());
	    	String value = (String) list.getModel().getElementAt(list.locationToIndex(p));
	    	System.out.println("Eintrag: " + value);
	    	}
    	});

Gruß
joschi
 
Hab gerade im Swing, Java2D/3D, SWT, JFace Forum ein thread gehabt. Ich wollte etwas ähnliches. wenn du den Code etwas änderst sollte es dir helfen.

Mußt denk ich nur das MouseEvent ändern und dann noch die gewählte Komponente ausgeben.
 
vielen dank für die schnelle antwort. hat auch soweit geklappt. nur leider gibt er mir das ganz oft unten aus. Das richtige element ist es ja aber wenn ich darauf gehen kommt es immer und immer wieder...warum?

Code:
public class mouseTest {

	public static final String REVISION = "$LastChangedRevision$";

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		JFrame fenster = new JFrame("Mouse");
		fenster.setSize(300,300);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		String  listData[] =
		{
				"Eintrag1",
				"Eintrag2",
				"Eintrag3"
		};

		final JList liste = new JList(listData);
		JScrollPane pane = new JScrollPane(liste);


		fenster.add(pane);

	      liste.addMouseMotionListener(new MouseAdapter() {
	    	  @Override
			public void mouseMoved(MouseEvent me) {
	    		  Point p = new Point(me.getX(),me.getY());
	    		  String value = (String) liste.getModel().getElementAt(liste.locationToIndex(p));
	              System.out.println("Eintrag: " + value);
	    	  }
	    	  });

		fenster.pack();
		fenster.validate();
	}
}




Gruß Blocker
 
ich glaub ich weiss warum...wahrscheinlich weil ich wenn ich die maus auf dem element bewege er das immer und immer wieder ausführt. liege ich da richtig?
 
Hi,

ja so isses.
Sobald sich die Maus Position ändert gibt's ein mouseMoved Event.

Kannst du folgendermassen umgehen:

Java:
list.addMouseMotionListener(new MouseAdapter() {
    		String lastSelected = "";
    	public void mouseMoved(MouseEvent me) {
	    	Point p = new Point(me.getX(),me.getY());
	    	
	    	String value = (String) list.getModel().getElementAt(list.locationToIndex(p));
	    	if(!value.equals(lastSelected)) {
	    		lastSelected = value;
	    		System.out.println("Selected: " + value);
	    	}
	    	}
    	});

Gruß
joschi
 
Zurück