2016-03-31 6 views
2

Ich habe das: Label = neue JLabel [9] [9]. Ich möchte ein neues Symbol für das Label festlegen (für das Label, auf das ich natürlich geklickt habe). Ich habe auch ein Panel (mit Gitternetz), in dem ich die Labels habe, es ist 500x500.Wie setze ich etwas mit mouselistener basierend auf getX und getY zu Labels?

Also in mouselistener, ich weiß, ich kann getX() und getY() verwenden. Wie kann ich danach sagen, in welche Zeile und Spalte ich geklickt habe? Soll ich das Panel in kleine Bereiche aufteilen? Ich hoffe, die Frage war verständlich. Ich lese hier Fragen, wie diese, aber ich weiß nicht wirklich Antwort gefunden ...

Bis jetzt ich dies schrieb:

  public void mouseClicked(MouseEvent e){ 

       int mouseX = e.getX(); 
       int mouseY = e.getY(); 
       int i = 0; 
       int j = 0; 



       URL url = Click.class.getResource("image.png"); 
       ImageIcon img = new ImageIcon(url); 
       label[i][j] = new JLabel(img); 
      } 
+0

* "Ich habe das: Label .." * An dieser Stelle würde ich eine undekorierte 'JButton' oder' JToggleButton' verwenden. * "URL url = Click.class.getResource (" image.png ");' "*. weil Schaltflächen eingebaute Methoden haben, um zwischen Bildern zu wechseln, wenn sie verschoben, fokussiert, gedrückt usw. werden. Kein Bedarf für einen bestimmten Listener. –

+1

* ".. wie kann ich sagen, in welcher Zeile und Spalte ich geklickt habe?" * Wenn der Listener zu jedem Label hinzugefügt wurde, können Sie 'e.getSource()' ermitteln, welcher der Quellen des Events ist. –

+0

Danke. Und kannst du mir ein kleines Beispiel für getSource() geben, also wie kann ich das verwenden? – programmo

Antwort

0

Sie sagen, dass Sie ein Panel mit einem Gridlayout bekommen haben. Sie haben nicht gesagt, wie Sie es genannt haben, nennen wir es .

In Ihrem mouseClicked Methode tun:

JLabel jlb = (JLabel) p.getComponentAt(e.getX(),e.getY()); 

Jetzt tun, was Sie es tun wollen.

Verwandte Themen