2010-06-11 10 views
18

मुझे एक जेबटन मिला है कि विभिन्न कारणों से मैं एक बटन की तरह कार्य करना चाहता हूं, लेकिन जेएलएबल की तरह दिखना चाहता हूं। यह वास्तव में हुड के नीचे एक जेएलबेल नहीं होना चाहिए, मैं नहीं चाहता कि उठाए गए बटन एज को दिखाना पड़े।जेएलबेल (या कम से कम बटन किनारे के बिना) देखने के लिए जेबटन बनाएं)

क्या JButtons के लिए "बटन लुक" बंद करने का कोई आसान तरीका है लेकिन सभी बटन कार्यक्षमता रखें?

मैं कुछ प्रकार के बनाये गए सबक्लास हाइपरबटन का निर्माण कर सकता हूं जो प्रदर्शन उद्देश्यों के लिए एक jlabel को सौंपा गया है, लेकिन मुझे उम्मीद है कि button.lookLikeAButton(false) की लाइनों के साथ कुछ है।

+2

क्या आप सीधे 'JLabel' का उपयोग नहीं कर सकते हैं और' onClickEvents' को संभाल सकते हैं? –

+0

ठीक है, शुरुआत करने वालों के लिए, मुझे सचमुच कुछ चाहिए जो मैं जेबटन के रूप में पास कर सकता हूं। इसके अलावा, मुझे केवल क्लिकक्विएंट्स की आवश्यकता नहीं है, मुझे वास्तव में पूरे बटन "चीज़" की आवश्यकता है - क्रियाएं, हथियार, आदि –

उत्तर

24

आप निम्न कार्य करना चाहते हैं:

 setFocusPainted(false); 
     setMargin(new Insets(0, 0, 0, 0)); 
     setContentAreaFilled(false); 
     setBorderPainted(false); 
     setOpaque(false); 

आप setFocusPainted(false) बाहर करने के लिए यदि आप इसे वास्तव में ध्यान देने के पेंट करने के लिए चाहते हैं (विंडोज देखो पर जैसे बिंदीदार रेखा सीमा और लगता है) कर सकते हैं।

मैंने उपरोक्त कोड का उपयोग ऐसे मामलों में किया है जहां मैं "केवल आइकन" बटन चाहता हूं।

+1

बिल्कुल सही! यह वही था जो मैं खोज रहा था। धन्यवाद! –

+0

मैंने इन्हें जोड़ा, और फिर यह जेएलएबल की तरह दिखता था और कर्सर हाथ में बदल जाएगा ताकि उपयोगकर्ता जानता है कि यह क्लिक करने योग्य है: 'सेटबॉर्डर (नया एम्प्टीबॉर्डर (0,0,0,0)); setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR)); ' – hepcat72

+0

एक विकल्प के रूप में, आप आइकन बदल सकते हैं (उदा। छायांकन) या पृष्ठभूमि रंग परिवर्तन उपयोगकर्ता को यह भी पता लगाने के लिए क्लिक करने योग्य है। – Avrom

2

पृष्ठभूमि रंग को पारदर्शी पर सेट करें, और सीमा को एम्प्टीबॉर्डर उदाहरण पर सेट करें।

उदा।

JButton button = new JButton(); 
    button.setBackground(null); 
    button.setOpaque(false); 
    button.setBorder(new EmptyBorder()); 

पाठ अभी भी ऊपर ले जाएँ और आप बटन पर क्लिक करें रूप में नीचे, और बटन अभी भी "सशस्त्र" पर क्लिक, पकड़ कर, और बटन क्षेत्र से बाहर माउस को ले जाकर "निरस्त्र" हो सकता है।

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

-1

क्या यह वास्तव में एक जेएलएबल में माउस श्रोता जोड़ने के लिए आसान हो सकता है? आप माउस दबाए गए और माउस पर रंग समायोजित कर सकते हैं, और माउस पर अपने एक्शन प्रोसेसिंग कर सकते हैं?

+2

माउस श्रोता की तुलना में बटन पर बहुत कुछ है। इसे एक क्रिया से जोड़ने के बारे में क्या? सशस्त्र/दबाए/जारी किए जाने के बारे में क्या? Debouncing के बारे में क्या? एक बटन की तरह लेबल कार्य करना लेबल को लेबल की तरह दिखने से कहीं अधिक जटिल होता है, इसलिए पिक्सेल विच्छेदन के साथ जाएं, यह कम दर्दनाक होगा। – shemnon

+0

@ शेमॉन: बिल्कुल। –

1
button.setBorderPainted(false); 
button.setContentAreaFilled(false); // ? 
0
setContentAreaFilled(false); 
setBorderPainted(false); 
setOpaque(false); 

यह तीन पंक्तियां चाल करती हैं।

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