2011-08-23 88 views
4

這之間的差距是我的問題擺脫JPanels

enter image description here

我怎樣才能從內部矩形框擺脫間隙(它實際上是中間JPanel的邊框)?

Outter矩形是一個擴展JCompoment。裏面有三個JPanel s。他們每個人都使用GridLayout。我甚至嘗試在大矩形中將Hgap設置爲負值,但它不會改變任何內容。

編輯:對不起,問題不清楚。我確實想要邊框,但我不想要內邊框和外邊框之間的縫隙。如果兩者之間沒有差距,則整個矩形將代表一個類圖類。

回答

7

您可能意味着這樣說:

enter image description here

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

public class GridBadFrame { 

    private JFrame frame; 
    private JPanel pnlCenter; 
    private JPanel pnl1; 
    private JPanel pnl2; 
    private JPanel pnl3; 

    public GridBadFrame() { 
     pnl1 = new JPanel(); 
     pnl1.setBackground(Color.red); 
     pnl2 = new JPanel(); 
     pnl2.setBackground(Color.blue); 
     pnl3 = new JPanel(); 
     pnl3.setBackground(Color.red); 
     JLabel lblWest = new JLabel(); 
     lblWest.setPreferredSize(new Dimension(50, 150)); 
     JLabel lblEast = new JLabel(); 
     lblEast.setPreferredSize(new Dimension(50, 150)); 
     JLabel lblNorth = new JLabel(); 
     lblNorth.setPreferredSize(new Dimension(600, 50)); 
     JLabel lblSouth = new JLabel(); 
     lblSouth.setPreferredSize(new Dimension(600, 50)); 
     pnlCenter = new JPanel(); 
     pnlCenter.setBackground(Color.black); 
     pnlCenter.setLayout(new java.awt.GridLayout(3, 0, 10, 10)); 
     pnlCenter.setPreferredSize(new Dimension(600, 400)); 
     pnlCenter.add(pnl1); 
     pnlCenter.add(pnl2); 
     pnlCenter.add(pnl3); 
     frame = new JFrame(); 
     frame.add(pnlCenter, BorderLayout.CENTER); 
     frame.add(lblNorth, BorderLayout.NORTH); 
     frame.add(lblSouth, BorderLayout.SOUTH); 
     frame.add(lblWest, BorderLayout.WEST); 
     frame.add(lblEast, BorderLayout.EAST); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocation(100, 100); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       GridBadFrame gridBadFrame = new GridBadFrame(); 
      } 
     }); 
    } 
} 
+0

是的!這正是我想要的。哦,我看到你在那裏做了什麼!哈哈,這是相當整潔的把戲。您有意在面板之間留下間隙,以便中央面板的背景將顯示爲分隔線。簡單但是做我想要的工作。歡呼 – bili

+0

很高興爲你服務 – mKorbel

1

我想如果你嘗試setBorderPainted(false)它可能會擺脫不必要的邊框。

+1

不是空間在這個問題上的問題? 雖然您可能選擇不繪製邊框,但組件仍佔用空間,但只有當它空時它纔會顯示出來! – gotomanners

0

該問題可能與JPanel上由GridLayout設置的首選高度和寬度有關。從

摘錄的documentation

網格佈局的優選寬度是 任何在容器倍分量的列的數目, 加上水平填充的次數最大首選寬度列加1,再加上目標容器的左右插槽 。

網格佈局的優選高度的任何容器中的時間的行數,行數的 加上垂直填充的次數加一,加上 頂部和底部組件的最大首選高度 目標容器的插頁。

2

它實際上是中間的JPanel

如果是邊框的邊框,刪除(setBorder(null))。