2012-12-09 17 views
5

भरने के लिए जेबटन का विस्तार करें मेरे पास JButton है जो मैं JPanel के आकार को भरने के लिए विस्तार करना चाहता हूं जो इसे पकड़ रहा है। मैंने भाग्य के साथ कुछ अलग तरीकों से ऐसा करने की कोशिश की है। - बटन के आकार परिवर्तन नहीं कियाजावा: कंटेनर

  1. सिफारिश here के रूप में मैनुअल आकार सेटिंग: यहां कुछ प्रयास कर रहे हैं।

    panel = new JPanel(new CardLayout()); 
    button = new JButton(); 
    button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE)); 
    panel.add(button); 
    
  2. एक BorderLayout उपयोग करने के लिए के रूप में here की ओर संकेत किया बटन विस्तार करने के लिए कोशिश कर रहा है। आकार नहीं बदला।

    panel = new JPanel(new BorderLayout()); 
    button = new JButton(); 
    panel.add(button, BorderLayout.CENTER); 
    

मैं शायद गलत तरीके से कुछ कर रही है, इसलिए किसी भी मदद की बहुत सराहना कर रहा है।

संपादित

यहाँ यह हल का सार है। वहाँ 2 चीजें हैं जो

  1. काम किया (new JPanel करने के लिए कॉल में) LayoutManager निकाला जा रहा है, BorderLayout को जो according to Oracle चूक रहे हैं।
  2. स्वीकृत उत्तर के रूप में कॉल में आयाम जोड़ना (यानी new BorderLayout(0,0))।
+0

क्या हम वास्तव में देखने की जरूरत है कि तुम क्या बटन 'panel' साथ कर रहे हैं। दूसरा प्रयास सिद्धांत में सही है। – MadProgrammer

उत्तर

5

आपका दूसरा प्रयास काम करना चाहिए, लेकिन इसका मतलब यह नहीं है कि अपने पूरे शीर्ष स्तर कंटेनर JPanel कि आपके JButton शामिल द्वारा भरा जाएगा। जब BorderLayout कंटेनर में कोई अन्य घटक नहीं हैं, तो केंद्र घटक पूरे कंटेनर को भरने के लिए विस्तारित होगा।

http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

खिड़की बढ़े हुए है, तो केंद्र क्षेत्र संभव के रूप में उपलब्ध स्थान की के रूप में ज्यादा हो जाता है।

क्या आप अपना ऐप चलाने पर जो देख रहे हैं उसकी एक छवि पोस्ट कर सकते हैं? नीचे एक कामकाजी उदाहरण है। ध्यान देने योग्य एक बात यह है कि प्रत्येक कंटेनर शीर्ष JFrame तक सभी तरह से BorderLayout का उपयोग कर रहा है। आपके प्रयास में यह संभव है कि कुछ ऊपरी स्तर के कंटेनर आपके JPanel के आकार को प्रतिबंधित कर रहे हैं, और इसलिए JButton अंदर भी।

frame = new JFrame(); 
frame.setBounds(100, 100, 450, 300); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JPanel panel = new JPanel(); 
panel.setLayout(new BorderLayout(0, 0)); 
JButton button = new JButton("I'm a button!"); 
panel.add(button); 

frame.getContentPane().add(panel, BorderLayout.CENTER); 

enter image description here

+1

+1 yup यह होना चाहिए। और अच्छा उदाहरण –

3

मेरे लिए ठीक लगता है जब BorderLayout का उपयोग कर:

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test { 

    public Test() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel() { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(300, 300); 
      } 
     }; 
     panel.setLayout(new BorderLayout()); 

     JButton button = new JButton("Button"); 

     panel.add(button); 

     frame.add(panel); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Test(); 
      } 
     }); 
    } 
} 

पोस्ट करें एक SSCCE विशिष्ट समस्याओं को दिखाने के लिए।

+2

+1 महान दिमाग;) – MadProgrammer

+1

डेविड, एक टिप: * केवल * सक्रिय ऐप का स्क्रीनशॉट प्राप्त करने के लिए alt + printScreeen का उपयोग करें। आपको नहीं लगता कि मैं उन पोस्ट छवियों को क्रॉप करने की परेशानी पर जाता हूं, क्या आप? ;) देखें [मैं स्क्रीनशॉट कैसे बना सकता हूं?] (Http://meta.stackexchange.com/questions/99734/how-do-i-create-a-creenshot-to-illustrate-a-post) अधिक युक्तियों के लिए। –

+1

@AndrewTompson आपको धन्यवाद और +1 ने मुझे भविष्य की पोस्ट के लिए बहुत समय बचाया;) –

4

BorderLayout सबसे सरल समाधान है।

आपके पास शायद समस्या यह है कि पैरेंट पैनल को कैसे रखा जा रहा है। BorderLayout का उपयोग करने वाले पैनल में बटन जोड़ने के बाद FlowLayout का उपयोग करने वाले पैनल में पैनल जोड़ना आपके परिणाम के बाद नहीं होगा।

enter image description here

public class ExpandButtonTest { 

    public static void main(String[] args) { 
     new ExpandButtonTest(); 
    } 

    public ExpandButtonTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new JButton("I'm a big button")); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

+1 अच्छा हेहे :) –

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