2016-08-02 11 views
0

Ich versuche, eine Funktion aufzurufen, wenn ein Benutzer (mit der Maus) auf ein Element in einer JComboBox klickt; Ich möchte jedoch nicht, dass dieses Ereignis für Tastaturereignisse ausgelöst wird. Ich möchte nur, dass es für einen Klick auf eine bestimmte Zelle des Dropdownfensters ausgelöst wird (ich weiß über addActionListener und addItemListener, aber diese werden für mehr Ereignisse ausgelöst, als ich möchte).JComboBox mouseClicked auf Zelle

EDIT: Ich hätte angegeben, dass mouseClicked auch nicht funktioniert - keine Ereignisse scheinen abgefeuert werden (aber sie waren an einem Punkt, aber wenn das passierte, feuern sie auch für Klicks auf das Textfeld), aber Ich dachte, das sei vom Titel ausgegangen.

Ich habe auch versucht die Lösung hier gegeben (auch nicht funktioniert): Editable JCombobox mouseclicked event not working

EDIT2: ich folgendes versucht, aber immer noch keine Ausgabe auf Klick:

try { 
    Field popupInBasicComboBoxUI = BasicComboBoxUI.class.getDeclaredField("popup"); 
    popupInBasicComboBoxUI.setAccessible(true); 
    BasicComboPopup popup = (BasicComboPopup)popupInBasicComboBoxUI.get(attachedCB.getUI()); 

    Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller"); 
    scrollerInBasicComboPopup.setAccessible(true); 
    JScrollPane scroller = (JScrollPane)scrollerInBasicComboPopup.get(popup); 

    scroller.getViewport().getView().addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
     super.mouseClicked(e); 
     System.out.println("nope"); 
     } 
    }); 
    } 
    catch (IllegalAccessException e) { 
    e.printStackTrace(); 
    } 
    catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
    } 
+0

Sie müssen die mouselistener zum Popup nicht die JComboBox hinzuzufügen, wie das Beispiel hier heißt es: http://engin-tekin.blogspot.com/2009/10/hrefhttpkfd.html Haben Sie versucht, diese ein und es hat nicht funktioniert? Wenn ja, wo benutzt du einen anderen LAF? – Jayfray

+0

Siehe EDIT2, hat nicht funktioniert :( – user235236

+0

Versuchen Sie, den Listener zu der JList von popup.getList() – Jayfray

Antwort

2

Sie haben es versäumt, es in die Ansichtsfensteransicht von scrollPane in dem Link, den ich in den Kommentaren gepostet habe, einzufügen.

Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller"); 
scrollerInBasicComboPopup.setAccessible(true); 
JScrollPane scroller = (JScrollPane) scrollerInBasicComboPopup.get(popup); 
scroller.getViewport().getView().addMouseListener(listener); 
+0

Ich hatte das versucht, immer noch nicht, die volle Code ist in EDIT2 – user235236

+0

Ich bekomme nicht eine Mausklick entweder, aber ich bekomme eine mousepressed und mouseReleased Ereignis. Sie müssen diese verwenden. Ändern Sie Ihre MausAdapter, um die MousePressed und/oder mouseReleased Methoden zu verwenden. – Jayfray

+0

Ausgezeichnet! Dies wird funktionieren! – user235236

0

hoffe, das hilft,

jComboBox.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jComboBoxMouseClicked(evt);//your logic here 
      }    
     }); 
+0

Leider ist das genau das, was ich versucht habe ... Nichts passiert – user235236

0

sollten Sie verwenden java.awt.event.ActionEvent, die (von javadoc zitiert) ein

semantisches Ereignis, das anzeigt, dass eine komponentendefinierte Aktion aufgetreten ist. Diese High-Level-Event wird durch eine Komponente (wie ein Knopf), wenn die bauteilspezifische Aktion tritt erzeugt (wie gedrückt) ...

wie folgt aus:

 jComboBox.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       javax.swing.JComboBox source = (javax.swing.JComboBox)evt.getSource(); 
       // use getSelectedIndex to know the item if needed 
       labelTextField.setText(source.getSelectedItem().toString()); 
      } 
     }); 

Hinweis getSelectedItem und getSelectedIndex und getSelectedObjects Methoden: das Sie, welches Element ausgewählt und Prozess nur wollen, dass die Elemente wurde wissen, können Sie

+0

Dies feuert auch auf Tastatur Ereignisse, die nicht akzeptabel ist – user235236