2011-06-01 10 views
6

संपादित
Downvoter, यह कैसे एक बुरा सवाल है? मैंने इस मुद्दे का रननेबल उदाहरण कोड प्रदान किया है। अगर यह आपके लिए काम करता है तो कृपया मुझे बताएं या अस्पष्ट क्या बताएं।JComboBox ध्यान और माउस क्लिक की घटनाओं से काम नहीं कर

हैलो,
कोड है, जो नीचे एक भी JComboBox एक JFrame में है में , मैं अधिसूचित नहीं कर रहा हूँ जब माउस JComboBox प्रवेश करती है या क्लिक किया जाता है या प्राप्त की ध्यान केंद्रित। हालांकि, PopupMenuEvent ठीक से काम करता है।

मैं क्या गलत कर रहा हूं? (मेरा लक्ष्य सतर्क होना है जब JComboBox के टेक्स्ट घटक पर क्लिक किया जाता है)

public class TestJComboBox extends javax.swing.JFrame 
{ 
    public TestJComboBox() 
    { 
     initComponents(); 
    } 

    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jComboBox1 = new javax.swing.JComboBox(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       formMouseClicked(evt); 
      } 
     }); 

     jComboBox1.setEditable(true); 
     jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 
     jComboBox1.setName("jComboBox1"); // NOI18N 
     jComboBox1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jComboBox1MouseClicked(evt); 
      } 
      public void mouseEntered(java.awt.event.MouseEvent evt) { 
       jComboBox1MouseEntered(evt); 
      } 
     }); 
     jComboBox1.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { 
      public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { 
      } 
      public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { 
      } 
      public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { 
       jComboBox1PopupMenuWillBecomeVisible(evt); 
      } 
     }); 
     jComboBox1.addFocusListener(new java.awt.event.FocusAdapter() { 
      public void focusGained(java.awt.event.FocusEvent evt) { 
       jComboBox1FocusGained(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(70, 70, 70) 
       .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(104, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(90, 90, 90) 
       .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(164, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void jComboBox1FocusGained(java.awt.event.FocusEvent evt) 
    { 
     System.out.println("JComboBox Focus gained"); 
    } 

    private void formMouseClicked(java.awt.event.MouseEvent evt) 
    { 
     System.out.println("Form clicked"); 
     jComboBox1.setFocusable(false); 
     jComboBox1.setFocusable(true); 
    } 

    private void jComboBox1MouseClicked(java.awt.event.MouseEvent evt) 
    { 
     System.out.println("JComboBox Click"); 
    } 

    private void jComboBox1PopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) 
    { 
     System.out.println("JComboBox Visible menu"); 
    } 

    private void jComboBox1MouseEntered(java.awt.event.MouseEvent evt) 
    { 
     System.out.println("Entered JComboBox"); 
    } 

    public static void main(String args[]) 
    { 
     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new TestJComboBox().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JComboBox jComboBox1; 
    // End of variables declaration 
} 

धन्यवाद!

उत्तर

7

संभावित रूप से डाउनवॉटर ने नेटबींस जीयूआई संपादक के उपयोग पर अपराध किया। मुझे इसे खुद पसंद नहीं है, लेकिन अगर आप पाते हैं कि आप वास्तव में इसके साथ एक जटिल गुई बनाए रख सकते हैं तो इसका उपयोग करने के लिए आपका स्वागत है। मैं व्यक्तिगत रूप से इसे बहुत ही परेशान करने वाली बग के कारण नफरत करता हूं जो केवल फ़ॉर्म को संपादित करने का प्रयास करते समय खुद को दिखाते हैं और यह चुपचाप आपके लेआउट और घटक सेटिंग्स को खो देता है। लेकिन वह बिंदु के बगल में है।

वैसे भी, अगर आप इस तरह अपने ActionListener जोड़ने की जरूरत:

jComboBox1.getEditor().getEditorComponent().addMouseListener(...); 

JComboBox वास्तव में एक JTextField, JButton, और JList इसके अंदर दफन के साथ एक समग्र घटक है, तो आप रैपिंग घटक को ActionListener जोड़ रहे थे , जब माउस घटनाएं वास्तव में आंतरिक JTextField पर जा रही हैं।

+0

नेटबीन्स का उपयोग करके अच्छी तरह से नाराज होने का एक मूर्ख कारण है। वैसे भी, माउस श्रोता जोड़ने के लिए सही जगह को समझाने के लिए बहुत बहुत धन्यवाद। एक जादू की तरह काम करता है! –

+1

: डी सिर्फ शराब पीने वालों की तरह, जिन्हें पीने का कारण चाहिए, शत्रुओं को हमेशा एक कारण मिलेगा। – enthusiasticgeek

0

यह मत भूलना कि कॉम्बोबॉक्स वास्तव में एक कंटेनर है। तो यदि आप वास्तव में सभी माउस ईवेंट चाहते हैं तो आपको श्रोता को सभी घटकों में जोड़ना चाहिए।

 

public void addMouseListener(final MouseListener mouseListener) { 
    this.comboBox.addMouseListener(mouseListener); 

    final Component[] components = this.comboBox.getComponents(); 
    for(final Component component : components) { 
     component.addMouseListener(mouseListener); 
    } 
    this.comboBox.getEditor().getEditorComponent().addMouseListener(mouseListener); 
} 

कृपया अधिक जानकारी के लिए swing mouse listeners being intercepted by child components जाएँ।

संबंधित मुद्दे

 संबंधित मुद्दे