2014-09-25 9 views
5

सबसे पहले, मैं एक वेब डेवलपर और नौसिखिया जावा प्रोग्रामर हूं। मेरा मालिक एक आवेदन में इस बटन बनाने के लिए मुझे पूछ रहा है:जावा में राउंड जेबटन कैसे बनाएं

enter image description here

मेरे कस्टम बटन वर्ग JButton या BasicButtonUI का विस्तार करना चाहिए ताकि यह पुन: उपयोग किया जा सकता है।

मैंने स्टैक ओवरफ़्लो पर कुछ शोध किया, लेकिन मुझे जवाब समझ में नहीं आया, खासकर मेरे मालिक से समय के बाधाओं के साथ।

+7

http://java-swing-tips.blogspot.com/2008/11/rounded-corner-jbutton.html –

+2

'पहले, मैं वेब Developer' हूँ - गरीब शोध के साथ पहले, पता नहीं कौन upvoted इस सवाल के लिए, किसी भी ग्राफिक्स, बस सीमाओं और बटन मॉडेल – mKorbel

+0

से घटनाओं को ओवरराइड करने की आवश्यकता नहीं है ... किसने इसे ऊपर उठाया? : डी क्या आपको यकीन है कि [यहां आपके लिए कुछ भी नहीं है ??] (http://stackoverflow.com/search?q=round+jbutton) याद रखें कि StackOverflow आपके लिए अपना काम करने के लिए एक जगह नहीं है। कृपया अब तक की कोशिश की गई है और आप कहां फंस गए हैं, इसकी एक रूपरेखा प्रदान करें। यह भी तर्क देने का प्रयास करें कि आप जेबटन का विस्तार क्यों करना चाहते हैं और धक्का नहीं देना चाहते हैं, – avalancha

उत्तर

13

आपको इसके लिए अपना स्वयं का घटक बनाना चाहिए।

अवहेलना एक JPanel पर paintComponent विधि, और paintComponent विधि ड्रा के अंदर (यानी भरने) रंग ग्रे में एक गोल rectangle2D:।

RoundRectangle2D roundedRectangle = new RoundRectangle2D.Float(x, y, w, h, 10, 10); 
g.fill(roundedRectangle); 

(पिछले दो मूल्यों वक्रता निर्धारित खेलते हैं चारों ओर

जब तक आप आप क्या चाहते हैं) मिलता है अब के लिए कदम एक्स, वाई और चौड़ाई और ऊंचाई कम करता है ताकि जब आप ne आकर्षित xt आयताकार, यह ग्रे आयताकार के अंदर बैठता है। ग्राफिक्स रंग को नीले रंग में सेट करें, फिर कुछ ऐसा करें:

RoundRectangle2D roundedRectangle2 = new RoundRectangle2D.Float(x + 5, y + 5, w - 10, h - 10, 10, 10); 
g.fill(roundedRectangle2); 

आपको टेक्स्ट जोड़ने की भी आवश्यकता होगी। टेक्स्ट जोड़ने के लिए एक एक्स और वाई स्थिति की आवश्यकता होती है। सटीक एक्स और वाई स्थिति गणना करने के लिए मुश्किल हो सकती है, इसलिए स्ट्रिंग के आयताकार आकार के बारे में कुछ और जानकारी प्राप्त करने के लिए आपको FontMetrics का उपयोग करने की आवश्यकता हो सकती है। फ़ॉन्टमेट्रिक्स में स्ट्रिंगविड्थ() और getHeight() जैसी विधियां हैं जो आपको यह निर्धारित करने में सहायता करेंगी कि आपका एक्स और वाई क्या होना चाहिए।

g.drawString("Click Me", x, y); 

अंत में आपको अपने पैनल पर माउस गति श्रोता होना चाहिए। जब श्रोता बटन पर होता है तो श्रोता को खोजने की आवश्यकता होती है और फिर घटक को फिर से चलाया जाता है।

आपका आयताकार shape ऑब्जेक्ट पर डाला जा सकता है, और यह गणना की जा सकती है कि माउस आकार में है या नहीं। उदाहरण के लिए:

shape.contains(x,y) 

अगर यह होता है, रंग, रीपेंट() या updateUI() पैनल पर बदल तो कहते हैं।

नोट: आपके रंग ऑब्जेक्ट कक्षा में कक्षा स्तर के क्षेत्र के रूप में रखा जाना चाहिए, ताकि इसे माउसओवर के माध्यम से बदला जा सके।

आशा है कि इससे मदद मिलती है!

+0

ठीक से जांच सकते हैं मुझे इसे आज़माएं –

+0

और चीजें हैं जिन्हें मैं जोड़ सकता हूं। लेकिन मुझे बताएं कि क्या मेरे जवाब में पर्याप्त नहीं है। –

+0

कृपया मुझे बताएं कि अन्य चीजें क्या हैं, इसलिए मैं इसे और भी बेहतर बना सकता हूं। धन्यवाद –

2

ऐसा करने के तरीके हैं।

1) जेबटन में अंतर्निहित एपीआई सेट आइकन है। आप इमेज आइकन यहां सेट कर सकते हैं।

2) आप माउस श्रोता (माउस दर्ज किया गया, माउस बाहर निकला) जोड़ सकते हैं आइकन को आवश्यक लोगों में बदल सकते हैं।

3) Make a button round - कर्क बटन बनाने के लिए देखें।

+0

+1 – mKorbel

4

आप ग्राफिक्स एपीआई का उपयोग कर अपने आप को करके चित्रों आकर्षित करने के लिए नहीं करना चाहते हैं या नहीं becaue छवियों, एक ग्राफिक डिजाइनर से आ सकता है की तुलना में आप उन्हें ImageIcon वस्तुओं के रूप में इस्तेमाल करते हैं और setRolloverIcon() और setIcon() उपयोग कर सकते हैं।

इस मामले में मैं इसे इस तरह से

class ButtonRollover { 

    private String normalImagePath; 
    private String rolloverImagePath; 

    public ButtonRollover(String normalImagePath, String rolloverImagePath) { 
     this.normalImagePath = normalImagePath; 
     this.rolloverImagePath = rolloverImagePath; 
    } 

    public void apply(AbstractButton abstractButton) { 
     abstractButton.setBorderPainted(false); 
     abstractButton.setBackground(new Color(0, 0, 0, 0)); 
     abstractButton.setRolloverIcon(createImageIcon(rolloverImagePath)); 
     abstractButton.setIcon(createImageIcon(normalImagePath)); 
    } 

    private ImageIcon createImageIcon(String path) { 
     java.net.URL imgURL = getClass().getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 
} 

और इसका इस्तेमाल से करना होगा। जैसे

public class Main extends JFrame { 

    public static void main(String[] args) { 
     Main main = new Main(); 
     main.setBackground(Color.WHITE); 
     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     main.setSize(640, 480); 

     Container contentPane = main.getContentPane(); 

     ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png", 
       "/bt_hover.png"); 

     JButton btn = new JButton(); 
     buttonRollover.apply(btn); 

     contentPane.add(btn); 
     main.setVisible(true); 
    } 
} 

बस छवि फ़ाइलों को कक्षापथ में रखें।

0
public class Main extends JFrame { 

    public static void main(String[] args) { 
     Main main = new Main(); 
     main.setBackground(Color.WHITE); 
     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     main.setSize(640, 480); 

     Container contentPane = main.getContentPane(); 

     ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png", 
       "/bt_hover.png"); 

     JButton btn = new JButton(); 
     buttonRollover.apply(btn); 

     contentPane.add(btn); 
     main.setVisible(true); 
    } 
} 
संबंधित मुद्दे