2013-05-08 7 views
5

के लिए addMouseListener आज मुझे एक समस्या है .. मेरा प्रोग्राम 8x8 ग्रिड बनाता है और जब मैं JButton पर क्लिक करता हूं तो समन्वय दिखाता हूं।एक जेननेल

लेकिन मैं JButton का उपयोग करने के लिए मना कर दिया और मैं JPanel के लिए जाने की जरूरत है .. लेकिन मेरे addMouseListener काम नहीं कर रहा तो मैं नहीं जानता कि कैसे है कि मैं 4 के बाद से खोज कर रहा हूँ ठीक करने के लिए यह संभव है .....

package coordboutons; 

    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 

    public class CoordBoutons extends JFrame { 

     CoordBoutons() { 
      super("GridLayout"); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 
      Container contenant = getContentPane(); 
      contenant.setLayout(new GridLayout(8, 8)); 

      for (int i = 0; i < 8; i++) 
       for (int j = 0; j < 8; j++) 
        contenant.add(new CaseEchiquier(i, j)); 

      pack(); 
      setVisible(true); 
     } 

     **class CaseEchiquier extends JPanel** { 
      private int lin, col; 
      CaseEchiquier(int i, int j) { 
       lin = i; 
       col = j; 
       setPreferredSize(new Dimension(80, 75)); 
       setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY); 
       addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent evt) { 
         System.out.println((char)('a' + col) + "" + (8 - lin)); 

        } 
       }); 
      } 


     } 

     public static void main(String[] args) { 
      JFrame.setDefaultLookAndFeelDecorated(true); 
      CoordBoutons coordBoutons = new CoordBoutons(); 
     } 
    } 
+0

मैं यहाँ कुछ कमी रह गई हो, लेकिन 'ActionListener' एक' MouseListener' – MadProgrammer

+0

तुम्हारा मतलब नहीं है ' addActionListener' काम नहीं कर रहा है। ऐसा इसलिए होगा क्योंकि आप इस प्रकार के श्रोता – Reimeus

+0

के साथ 'जेपीनेल' को पंजीकृत नहीं कर सकते हैं, आप अपने पैनलों में एक मूसलिस्टर जोड़ने की कोशिश कर रहे हैं? लेकिन आपका कोड sais actionListener, जेपीनेल में कोई एक्शनलिस्टर विधि नहीं है। और मुझे लगता है कि 64 नएमाउसलिस्टर्स होने का बुरा विचार है, आपको केवल 64 पैनलों के लिए एक की आवश्यकता है। तो अपने केसइचिकियर (int i, int j, mouseListener m) –

उत्तर

6

JPanel नहीं है ActionListener क्षमताओं है। इसके बजाय, आप एक MouseListener

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class CoordBoutons extends JFrame { 

    CoordBoutons() { 
     super("GridLayout"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container contenant = getContentPane(); 
     contenant.setLayout(new GridLayout(8, 8)); 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) { 
       contenant.add(new CaseEchiquier(i, j)); 
      } 
     } 

     pack(); 
     setVisible(true); 
    } 

    class CaseEchiquier extends JPanel { 

     private int lin, col; 

     CaseEchiquier(int i, int j) { 
      lin = i; 
      col = j; 
      setPreferredSize(new Dimension(80, 75)); 
      setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY); 
      addMouseListener(new MouseAdapter() { 
       private Color background; 

       @Override 
       public void mousePressed(MouseEvent e) { 
        background = getBackground(); 
        setBackground(Color.RED); 
        repaint(); 
       } 

       @Override 
       public void mouseReleased(MouseEvent e) { 
        setBackground(background); 
       } 
      }); 
//   addActionListener(new ActionListener() { 
//    public void actionPerformed(ActionEvent evt) { 
//     System.out.println((char) ('a' + col) + "" + (8 - lin)); 
// 
//    } 
//   }); 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame.setDefaultLookAndFeelDecorated(true); 
       CoordBoutons coordBoutons = new CoordBoutons(); 
      } 
     }); 
    } 
} 

उपयोग करने के लिए अधिक जानकारी के लिए How to Write Mouse Listeners पर एक नजर डालें जरूरत है ...

+0

ओह पुरुष आपको बहुत धन्यवाद देते हैं मैंने लंबे समय से खोज की ... और अब मुझे समझ में आया कि यह काम करता है और मैं किसी मामले पर क्लिक करके कॉर्ड प्राप्त कर सकता हूं = – user2360545

+0

आपकी मदद के लिए धन्यवाद! बहुत उपयोगी;) हालांकि, ** "System.out.println" का उपयोग किये बिना मैं प्रत्येक मामले से निर्देशांक कैसे प्राप्त कर सकता हूं। मुझे अक्षर एएच (कॉलम) और संख्या 1-8 (पंक्तियों) ** – user2360545

+0

के साथ getX() और getY() जैसे कुछ चाहिए, यह वास्तव में आपके पास मौजूद अधिक जानकारी पर निर्भर करेगा, आपको प्रत्येक कॉलम की चौड़ाई जानने की आवश्यकता होगी और प्रत्येक पंक्ति की ऊंचाई। वर्ग, सूचना 'लिन' और 'कोल' से जानकारी का उपयोग करने का एक बेहतर समाधान हो सकता है – MadProgrammer

7

समस्या यह है कि विधि addActionListener नहीं है एक JPanel के लिए मौजूद है। आपको इस मामले के लिए उपयुक्त श्रोता का उपयोग करना चाहिए (java.awt.event.MouseListener)। चूंकि MouseListener एक इंटरफेस (और आप अपने सभी विधियों को लागू नहीं करना चाहते हैं) है, तो आप एक MouseAdapter का उपयोग करें और केवल विधि (रों) ओवरराइड की जरूरत है, इस तरह हो सकता है:

addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     System.out.println((char)('a' + col) + "" + (8 - lin)); 
    } 
}); 
+0

आपको बहुत धन्यवाद अब मैं समझ गया =) महान मदद! – user2360545

+0

यह सही उत्तर होना चाहिए .. – TiMr

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