2015-06-14 12 views
5

तो मुझे क्या करना कोशिश कर रहा हूँ इस बनाने है: enter image description hereमुसीबत

मैं एक gridbag लेआउट का उपयोग कर रहा हूँ और यहाँ क्या मैं अब तक है:

public class board { 
public static void addComponentsToPane(Container pane) { 
    pane.setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 

    JPanel leftTop = new JPanel(); 
    leftTop.setPreferredSize(new Dimension(251,300)); 
    leftTop.setBackground(Color.black); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 0; 
    c.gridy = 0; 

    pane.add(leftTop, c); 

    JPanel middleTop = new JPanel(); 
    middleTop.setPreferredSize(new Dimension(251,200)); 
    middleTop.setBackground(Color.green); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 1; 
    c.gridy = 0; 

    pane.add(middleTop, c); 

    JPanel rightTop = new JPanel(); 
    rightTop.setPreferredSize(new Dimension(251,600)); 
    rightTop.setBackground(Color.blue); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 2; 
    c.gridy = 0; 

    pane.add(rightTop, c); 

    JPanel leftBottom = new JPanel(); 
    leftBottom.setPreferredSize(new Dimension(251,300)); 
    leftBottom.setBackground(Color.red); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 0; 
    c.gridy = 1; 

    pane.add(leftBottom, c); 

    JPanel middleBottom = new JPanel(); 
    middleBottom.setPreferredSize(new Dimension(251,400)); 
    middleBottom.setBackground(Color.yellow); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 1; 
    c.gridy = 1; 

    pane.add(middleBottom, c); 
} 

private static void createAndShowGUI() { 
    JFrame frame = new JFrame("GridBagLayoutDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    addComponentsToPane(frame.getContentPane()); 

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

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
} 

ऐसा लगता है कि कुछ बनाता है : enter image description here

मैं पैनलों को कैसे दबाऊंगा ताकि वे मेरी पहली तस्वीर में एक दूसरे को छू रहे हों। मैंने ग्रिडबैगकंट्रेन्ट्स को देखा लेकिन मुझे कुछ भी नहीं मिला जो ऐसा लगता था कि यह काम करेगा। धन्यवाद!

+0

क्या मूल पैनल का आकार बदला जा सकता है? यदि हां, तो आप अपने घटकों को कैसे बढ़ने और घटाने की उम्मीद करते हैं - क्या सभी घटकों आनुपातिक रूप से आकार बदलते हैं, या कुछ घटकों को एक निश्चित आकार में रहने के लिए हैं जबकि अन्य बढ़ते हैं और सिकुड़ते हैं? –

उत्तर

4

एक लेआउट प्रबंधक के साथ पूर्ण लेआउट समस्या को हल करने की कोशिश करने के बजाय, यह अक्सर घोंसला लेआउट के लिए आसान होता है। उदाहरण के लिए, आपके उदाहरण कोड को क्षैतिज ग्रिड लेआउट का उपयोग करने के लिए संशोधित किया जा सकता है (स्तंभों को समान चौड़ाई रखने के लिए - मुझे वास्तव में पता नहीं है कि आप इसे मजबूर करना चाहते हैं। यदि नहीं, तो FlowLayout या BoxLayout बेहतर होगा), और । छवि छोटा करने के लिए एक और ध्यान दें के रूप में यह आम तौर पर override getPreferredSize() rather than use setPreferredSize() बेहतर है

Screenshot of the result

(मैं पसंद के आकार थोड़ा संशोधित; setPreferredSize: में

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class board { 
    public static void addComponentsToPane(Container pane) { 
     pane.setLayout(new GridLayout(1, 0)); 

     JPanel left = new JPanel(); 
     pane.add(left); 
     left.setLayout(new BoxLayout(left, BoxLayout.Y_AXIS)); 

     JPanel leftTop = new JPanel(); 
     leftTop.setPreferredSize(new Dimension(125, 150)); 
     leftTop.setBackground(Color.black); 
     left.add(leftTop); 

     JPanel leftBottom = new JPanel(); 
     leftBottom.setPreferredSize(new Dimension(125, 150)); 
     leftBottom.setBackground(Color.red); 
     left.add(leftBottom); 

     JPanel middle = new JPanel(); 
     pane.add(middle); 
     middle.setLayout(new BoxLayout(middle, BoxLayout.Y_AXIS)); 

     JPanel middleTop = new JPanel(); 
     middleTop.setPreferredSize(new Dimension(125, 100)); 
     middleTop.setBackground(Color.green); 
     middle.add(middleTop); 

     JPanel middleBottom = new JPanel(); 
     middleBottom.setPreferredSize(new Dimension(125, 200)); 
     middleBottom.setBackground(Color.yellow); 
     middle.add(middleBottom); 

     JPanel right = new JPanel(); 
     right.setPreferredSize(new Dimension(125, 300)); 
     right.setBackground(Color.blue); 

     pane.add(right); 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("GridBagLayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

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

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

परिणाम: कॉलम एक BoxLayout प्रत्येक का उपयोग() हालांकि त्वरित उदाहरण के लिए सुविधाजनक है)

+0

क्षमा करें मैंने जवाब नहीं दिया था कि मैं सो रहा था, लेकिन यह मदद के लिए बहुत अच्छा काम करता है! – user2747058

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