2013-06-13 19 views
-1

我需要構建一個類似於這個圖像的屏幕。我有一個主面板,並在該面板中,我需要添加多列2垂直列和3水平。這些列是Jpanels。我試圖使用GridLayout,但我沒有成功。製作一個JPanel並在裏面添加多個JPanels

enter image description here

+0

嘗試此邊框佈局 – Freak

+0

邊框佈局對此設計無用,因爲在區域中我只能添加一個組件。 – AlexGo

+1

@AlexGo但是你可以使用'BorderLayout'作爲基礎。兩個側面板可以在自己的面板和另一個面板中的兩個中心面板(3個面板都在一起)出口,這意味着您可以獲得East,Center和West .. – MadProgrammer

回答

4

非常rarly將一個單一的佈局管理器做你想要的一切。你想在你可以/需要的地方開始使用複合佈局管理器。

這個例子既使用GridLayoutGridBagLayout

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Insets; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.EmptyBorder; 

public class BadLayout21 { 

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

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

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 

      setBorder(new EmptyBorder(10, 10, 10, 10)); 

      setLayout(new GridBagLayout()); 

      JPanel leftPane = new JPanel(new GridLayout(2, 0, 0, 4)); 
      leftPane.add(createPane(Color.RED)); 
      leftPane.add(createPane(Color.RED)); 

      JPanel leftMiddlePanel = createPane(Color.BLUE); 
      JPanel rightMiddlePanel = createPane(Color.BLUE); 

      JPanel rightPane = new JPanel(new GridLayout(2, 0, 0, 4)); 
      rightPane.add(createPane(Color.GREEN)); 
      rightPane.add(createPane(Color.GREEN)); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.anchor = GridBagConstraints.NORTH; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.weightx = 1; 
      gbc.insets = new Insets(20, 20, 0, 0); 
      add(leftPane, gbc); 

      gbc.gridx = 3; 
      gbc.anchor = GridBagConstraints.NORTH; 
      gbc.insets = new Insets(20, 0, 0, 20); 
      add(rightPane, gbc); 

      gbc.weightx = 0; 
      gbc.gridx = 1; 
      gbc.weighty = 1; 
      gbc.fill = GridBagConstraints.VERTICAL; 
      gbc.anchor = GridBagConstraints.NORTH; 
      gbc.insets = new Insets(0, 0, 0, 10); 
      add(leftMiddlePanel, gbc); 

      gbc.gridx = 2; 
      gbc.insets = new Insets(0, 10, 0, 0); 
      add(rightMiddlePanel, gbc); 

     } 

     protected JPanel createPane(Color color) { 
      JPanel panel = new JPanel(); 
      panel.setPreferredSize(new Dimension(25, 25)); 
      panel.setBackground(color); 
      return panel; 
     } 

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

我認爲這將是很難把所有的面板,直接在一個大的面板。可能有多種解決方案。如將主面板分成四個獨立(垂直)面板並將最終面板添加到這四個子面板。或者如怪異的建議,從一個邊界佈局開始,首先創建一個左側子面板,中間子面板和右側子面板,每個面板都有自己的佈局管理器。在這些子面板中,您可以放置​​最終的面板。

儘管確切的目的或目標是對我來說有點模糊,現在,我希望可以用我的suggesten。