2012-01-27 16 views
5
class Test extends JPanel implements MouseListener 
{ 
    private JButton b1, b2, b3, b4; 

    public Test() 
    { 
     setLayout (new GridLayout (2, 3)); 

     b1 = new JButton ("Button 1"); 
     b2 = new JButton ("Button 2"); 

     add (b1); 
     add (b2); 
    } 

    public void mousePressed (MouseEvent event) 
    { 
     if (event.getText() == b1.getText()) 
     { 
     } 
    } 
} 

मैं अगर वहाँ था MouseListener या JPanel वर्ग है कि मुझे एक बटन है कि क्लिक किया जाता है का पाठ प्राप्त करने के लिए अनुमति देता है के भीतर एक विधि सोच रहा था। धन्यवादमैं जावा में एक बटन का पाठ कैसे प्राप्त करूं?

+4

स्ट्रिंग की तुलना करने के लिए '==' के बजाय 'बराबर' का उपयोग करें। आप इसे कैसे प्राप्त कर रहे हैं इसके साथ क्या गलत है? –

+1

यह कहता है कि getText() java.awt.event.MouseEvent में कोई विधि नहीं है - क्या माउसइवेंट में एक समान विधि है जो इस तरह का टेक्स्ट लौटाती है? –

उत्तर

4

MouseEvent एपीआई पर एक नज़र वहाँ एक विधि getSource() है जो आप उस वस्तु जहां घटना हुई रिटर्न का उपयोग कर सकते है ले लो। फिर जांचें कि क्या ऑब्जेक्ट एक बटन का उदाहरण है। यदि यह है कि आप इसे बटन प्रकार पर डाल सकते हैं और फिर वहां से टेक्स्ट प्राप्त कर सकते हैं।

public void mousePressed (MouseEvent event){ 
    Object o = event.getSource(); 
    JButton b = null; 
    String buttonText = ""; 

    if(o instanceof JButton) 
    b = (JButton)o; 

    if(b != null) 
    buttonText = b.getText(); 

} 
+1

मुझे यकीन नहीं है कि बी की जांच हो रही है! = शून्य की आवश्यकता है, क्योंकि शून्य जेबटन ऑब्जेक्ट किसी ईवेंट को आग नहीं लगा सकता है, मुझे लगता है। अगर मैं गलत हूं, तो कृपया मुझे सही करें। – Benjamin

+1

@ बेंजामिन की आवश्यकता है f.e. मॉडल से जेबीयूटन प्राप्त करें, या सार बटन दोनों +1 – mKorbel

+0

@ बेंजामिन नल चेक विशेष रूप से माउस के मामले के लिए विभिन्न घटकों के लिए इस्तेमाल किया जा रहा है। अन्य घटक माउस घटनाओं के लिए नियंत्रक के रूप में कार्य करने के लिए इस विधि का उपयोग कर सकते हैं। निर्णय लेने के लिए डेवलपर पर निर्भर होगा। यदि आप चाहें तो आप सबकुछ मूल उदाहरण में भी रख सकते हैं। मैंने इसे सादगी के लिए अभी लिखा है। – Sean

4

आपको एक्शनलिस्टर को देखने और इसे लागू करने का प्रयास करना चाहिए। उन कार्यों, निकाल दिया जाता है जब भी आप एक बटन क्लिक करें, यह आप कैसे काम करना चाहिए है:

class Test extends JPanel implements ActionListener { 
... 
    public Test() { 
     super(); 
     ... 
     b1 = new JButton("Button 1"); 
     ... 
     add(b1); 
     ... 
     b1.addActionListener(this); 
     ... 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     System.out.println(((JButton) event.getSource()).getText()); 
     if (event.getSource() == b1) { 
      // do sth 
     } else if (event.getSource() == b2) { 
      // do sth else 
     } 
    } 
} 

फिर एक मुख्य विधि लिख सकते हैं और एक JFrame करने के लिए Test पैनल का एक नया उदाहरण जोड़ सकते हैं और देखें कि यह कैसे काम करता है।

ट्यूटोरियल निम्नलिखित वेबसाइट पर पाया जा सकता है: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

+1

यह काम किया! धन्यवाद :) –

+0

@ रयान एडवर्ड डौघर्टी :) [स्वीकार करें] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) उत्तर, अगर यह है एक जिसे आप ढूंढ रहे हैं – Lion

0
import java.util.Arrays; 

import java.util.List; 

private void Button1ActionPerformed(java.awt.event.ActionEvent evt) { 

//******************************************************** 

     String Hunt1 = evt.toString(); 
     Hunt1 = Hunt1.replaceAll("=", ","); 
     Hunt1 = Hunt1.replaceAll("]", ","); 
     String [] Hunt2 = Hunt1.split(","); 
     List Hunt3 = Arrays.asList(Hunt2); 
     String ButtonText = Hunt3.get(2).toString(); 
     System.out.println(ButtonText); } 

//******************************************************* 

इस तरह मैंने किया है। मैं एक विधि के लिए बटन नाम पास करने का एक तरीका ढूंढ रहा था ताकि मैं लगभग 12 बटनों के if(s==Button1){}else if(s==Button2){..... दायरे को चला सकूं।

बटन बटन को पकड़ना मेरे लिए मुश्किल साबित हुआ (मैं केवल एक दिन के लिए जावा कर रहा हूं) इसलिए मैं इस विधि के साथ लेबल/टेक्स्ट को पास करने के लिए आया था।

कि कोड तो अपने आप ही विधि में रखा जा सकता है कि आप अपने बटन सेट तुम सिर्फ प्रत्येक क्लिक घटना में जाकर

SendButtonLabel(evt.ToString()); 

पेस्ट फिर वहाँ से करने के लिए इसे पारित कर सकते हैं बनाने के बाद अपने यदि/तो buttonlist विधि

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

1

यह मुझे नट्स भी चला रहा था ... और यहां जवाब है: बटन के लिए कोई .getText() विधि नहीं है ... आप का उपयोग करना चाहते हैं .getLabel() नामस्थान मज़ेदार नहीं हैं?

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