2012-04-09 19 views
2

我使用擺動建立與一個JPanel裏面4個JPanels使用BorderLayout管理器的GUI:空的JPanel不來正確定位到其他JPanels

  1. 標籤的行
  2. Jbutton將
  3. 的A柱
  4. 顯示區域(它是擴展JPanel和無關添加到它,並且被用作一個繪圖區域的類)
  5. 按鈕的另一列

我的代碼如下所示:

JPanel middle = new JPanel(); 
    middle.setLayout(new BorderLayout()); 
    middle.add(midLabels,BorderLayout.NORTH); 
    middle.add(pickupButtons,BorderLayout.WEST); 
    middle.add(simulation,BorderLayout.CENTER); 
    middle.add(dropButtons,BorderLayout.EAST); 

仿真面板僅僅是一個擴展的JPanel重寫的paintComponent繪製的圖像。問題是,模擬區域是在左邊,而不是在中間:

The wrong layout

我真正想要的是:

enter image description here

編輯,這裏有一個例子,做我需要使用不同的佈局管理器來正確定位空JPanel?:

import java.awt.*; 
import javax.swing.*; 
public class Test extends JFrame { 
    final static int MAXFLOORS = 8; 
    public Test() { 
     setLayout(new BorderLayout()); 
     setTitle("Simulator"); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500, 500); 

     JPanel simulation = new JPanel(); 
     JPanel dropButtons = new JPanel(); 
     JPanel pickupButtons = new JPanel(); 

     pickupButtons.setLayout(new GridLayout(MAXFLOORS, 1)); 
     dropButtons.setLayout(new GridLayout(MAXFLOORS, 1)); 
     setLayout(new BorderLayout());  
     add(simulation,BorderLayout.CENTER); 
     add(dropButtons,BorderLayout.EAST); 
     add(pickupButtons,BorderLayout.WEST); 

     for (int i = MAXFLOORS; i != 0; i--) { 
      JButton pb = new JButton("F" + i); 
      dropButtons.add(pb); 

      JButton db = new JButton("F" + i); 
      dropButtons.add(db); 
     }  
     repaint(); 
    } 
    public static void main(String[] args) { 
     new Test(); 
    } 
} 
+1

爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。順便說一句 - 你有問題嗎? – 2012-04-09 20:35:46

+0

隨機問題,你有沒有嘗試改變你添加組件的順序? – 2012-04-09 20:43:29

+1

看起來您可能會(無意中)將'pickup按鈕'添加到'dropButtons'。 – trashgod 2012-04-09 20:45:18

回答

3

看看您的代碼:

for (int i = MAXFLOORS; i != 0; i--) { 
     final JButton pb = new JButton("F" + i); 
     dropButtons.add(pb); 

     final JButton db = new JButton("F" + i); 
     dropButtons.add(db); 
    } 

您要添加到dropButtons兩次,而不是pickupButtons