Ich habe ein Label und möchte einfach einen MouseListener implementieren.
Das geht aber so nicht.
label.addMouselistener(this);
Denn da schreibt Java
Cannot use this in a static context.
Damit hat er recht die Anweisung steht in ner statischen Methode.
Wie gehts anders?
Warum erstellt die main-Methode nicht einfach ein Objekt der Klasse wo du implements MouseListener ran geschrieben hast? Die Instanz brauchst du ja in jedem Fall! Dort dann eben paintMe aufrufen (das static weg) dann geht das Ganze auch. Allerdings scheint mir das immer noch ein wenig kreuz und quer Und AWT und Swing Komponenten mischen ist auch nicht das Wahre!
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassDemoFrameextendsJFrameimplementsMouseListener{publicDemoFrame(String title){super(title);this.setSize(400,300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JLabel label =newJLabel("Ein kleiner Text, auf den man klicken kann.");
label.setHorizontalAlignment(JLabel.CENTER);
label.addMouseListener(this);this.add(label,BorderLayout.CENTER);this.setVisible(true);}publicvoidmouseClicked(MouseEvent e){JOptionPane.showMessageDialog(this,"Mausklick auf dem JLabel registiert!","Mitteilung",JOptionPane.INFORMATION_MESSAGE);}publicvoidmousePressed(MouseEvent e){}publicvoidmouseReleased(MouseEvent e){}publicvoidmouseEntered(MouseEvent e){}publicvoidmouseExited(MouseEvent e){}publicstaticvoidmain(String[] args){newDemoFrame("DEMO");}}
Danke funktioniert.
Nur noch ein Detail:
Wenn ich mir keine msg-Box ausgeben lasse sondern die Background -Farbe des Labels ändern will bekomm ich das hier:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Schiffe_Versenken_PC1.mouseClicked(Schiffe_Versenken_PC1.java:381)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Und der Code lautet? In L-ectron-X seinem Code sind die Komponente nur lokal sichtbar!
Wenn du jetzt in dem Code oben eine Instanzvariable angelegt hast (meinetwegen JLabel label; ) musst du natürlich das erste JLabel in Zeile 12 löschen