2011-11-22 11 views
8

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

क्या कोई आइकन रखने का कोई तरीका है जो जुबटन को संलग्न करता है? कोड की बिट यह स्पष्ट करने के:

public JewelClass(){ 

    setBackground (new Color (30,30,30)); 
    addActionListener(this); 
    setLayout(new GridLayout()); 

    ImageIcon icon = new ImageIcon(src/carre.jpg); 
    setIcon (resizeIcon(icon,60,60)); 

} 

resizeIcon एक निजी समारोह, कि एक चिह्न, चौड़ाई पैरामीटर और ऊंचाई पैरामीटर लेता जा रहा है, और एक आकार दिया चिह्न (जाहिर है) वापस जाएँ। मैंने लेआउट को बदलने की कोशिश की, लेकिन यह कुछ भी नहीं बदलेगा। मैंने जेबटन की चौड़ाई/ऊंचाई प्राप्त करने का प्रयास किया, लेकिन जब तक आइकन जोड़ा नहीं जाता है तब तक वे मौजूद नहीं होते हैं, यह काम नहीं करता है।

क्या आप लोगों को यह पता होना चाहिए कि इसे कैसे प्राप्त किया जाए? यह एक आइकन होना जरूरी नहीं है, जब तक कि मेरा जेबटन छवि से भरा हुआ हो, मैं इसे भयानक करता हूं, यह कमाल है :)

धन्यवाद!

उत्तर

3
स्विंग में

यदि आप किसी अन्य JComponent के लिए किसी भी JComponent जोड़ सकते हैं, ImageJLabel है के लिए सबसे अच्छा JComponent, तो क्यों नहीं डाल JLabel#setIcon() को JButton

enter image description hereenter image description here

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

public class ResizeIconInButton extends JFrame { 
    private static final long serialVersionUID = 1L; 

    public ResizeIconInButton() { 
     JButton myButton = new JButton(); 
     myButton.setLayout(new BorderLayout()); 
     myButton.add(new CustomComponents0()); 
     add(myButton, BorderLayout.CENTER); 
     setPreferredSize(getPreferredSize()); 
     setTitle("Resize Icon In Button"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       ResizeIconInButton main = new ResizeIconInButton(); 

      } 
     }; 
     javax.swing.SwingUtilities.invokeLater(r); 
    } 
} 

class CustomComponents0 extends JLabel { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(200, 100); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(300, 200); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     int margin = 10; 
     Dimension dim = getSize(); 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2); 
    } 
} 

संपादित करें:

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

public class ResizeIconInButton extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg"; 
    private JButton myButton = new JButton(); 
    private JLabel myLabel = new JLabel(); 

    public ResizeIconInButton() { 
     Icon myIcon = new ImageIcon(IMAGE_PATH); 
     myLabel.setIcon(myIcon); 
     myButton.setLayout(new BorderLayout()); 
     myButton.add(myLabel); 
     add(myButton, BorderLayout.CENTER); 
     setPreferredSize(new Dimension(200, 100)); 
     setTitle("Resize Icon In Button"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ResizeIconInButton main = new ResizeIconInButton(); 
      } 
     }); 
    } 
} 
+0

एक सरल दृष्टिकोण के लिए, 'int margin = 0 में बदलें; आयाम मंद = this.getParent()। GetSize(); प्राप्त करने के लिए 'getMinimumSize() 'और' getPreferredSize() 'ओवरराइड करने की आवश्यकता के बिना, मूल घटक के मार्जिन पहले से ही –

+0

सेट सेट कर चुके हैं! तो यह एक आकार पेंट करने के लिए काम करता है, लेकिन एकमात्र चीज है, एक बार जब मैं 'g.setColor (Color.red) को प्रतिस्थापित करता हूं; g.fillRect (मार्जिन, मार्जिन, dim.width - मार्जिन * 2, dim.height - मार्जिन * 2); 'आइकन आइकन = नया छवि आइकन (" src/triangle.jpg "); icon.paintIcon (यह, जी, 60, 60); ' , यह कुछ भी प्रदर्शित करना बंद कर देता है। क्या आपको कोई विचार है कि यह क्यों है? –

+0

@Mikalichov कृपया मेरे संपादन को देखें – mKorbel

2

आप उस बटन जो आकार बदलने पर में यह

yourButton.addComponentListener(new ComponentListener() { 

     @Override 
     public void componentShown(ComponentEvent e) { 
      // ignore 
     } 

     @Override 
     public void componentResized(ComponentEvent e) { 
      resizeIcon(icon, yourButton.getWidth(), yourButton.getHeight()); 
     } 

     @Override 
     public void componentMoved(ComponentEvent e) { 
      // ignore 
     } 

     @Override 
     public void componentHidden(ComponentEvent e) { 
      // ignore 
     } 
    }); 

आशा है कि यह मदद करता है अपने छवि आकार बदलता है करने के लिए एक घटक-श्रोता जोड़ सकता है!

3
  1. अवहेलना paintComponent
  2. इसका सीधे Draw the imageGraphics वस्तु

और जब छवि ड्राइंग, आयामी तर्क प्रदान getWidth() और getHeight() है। ऐसा करके, आकार बदलना स्वचालित हो जाएगा। साथ ही, आकार बदलने पर, आप कुछ एंटी-एलाइजिंग करना चाहेंगे ताकि छवि को पिक्सलेटेड न हो।

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