2012-03-25 61 views
3

我將KenKen作爲使用java swing庫的術語項目。爲了對齊,我使用了gridbag和gridlayout,但現在我想添加一個JPanel組件到UI。這些截圖會使問題更加清晰:使用GridLayout對jpanels組件進行垂直對齊

Before I click on the button in the lowest panel below http://i41.tinypic.com/288jo9.png

現在我選擇了網格單元,而我想在最左邊的面板中添加的各個候選。

This is what happens when I click the number buttons 2, 3, 4 http://i41.tinypic.com/14scr9e.png

它擾亂網格和麪板的相鄰對準。

下面是板與它們各自的佈局:

JPanel buttonPanel = new JPanel(); 
buttonPanel.setLayout(new GridLayout(1, 4, 5, 5)); 
buttonPanel.setPreferredSize(new Dimension(20,40)); 
buttonPanel.add(undoButton); 
buttonPanel.add(redoButton); 
buttonPanel.add(eraseButton); 
buttonPanel.add(hintButton); 

JPanel cellPanel = new JPanel(); 
cellPanel.setName("cellPanel"); 
cellPanel.setLayout(new GridLayout(pSize, pSize, 0, 0)); 

JPanel numPanel = new JPanel(); 
numPanel.setName("numPanel"); 
numPanel.setLayout(new GridLayout(1,1,5,5)); 
numPanel.setPreferredSize((new Dimension(50,60))); 

JPanel candPanel = new JPanel(); 
candPanel.setName("candidatesPanel"); 
JLabel candidates = new JLabel("Candidates"); 
candidates.setFont(new Font("Courier New", Font.ITALIC, 14)); 
candidates.setForeground(Color.GRAY); 
candPanel.setLayout(new GridLayout(0,1)); 
candPanel.add(candidates); 

然後一切進入內容面板:

content.add(buttonPanel, pos.nextCol().expandW()); 
content.add(candPanel, pos.nextRow()); 
content.add(new Gap(GAP) , pos.nextRow()); // Add a gap below 
content.add(cellPanel, pos.nextCol()); 
content.add(numPanel,pos.nextCol().expandW()); 

的按鈕上運行時所有生成的,並且它們被加入到在動作監聽器中的candPanel。

+2

*「我將在下一篇文章中分享這些代碼。」*爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)(作爲**這篇文章的編輯)。順便說一句 - 從來沒有聽說過'作物'? Alt-Print屏幕只截取活動的GUI。請參閱[如何創建屏幕截圖?](http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post)(有關製作*很棒*截圖)。 – 2012-03-25 18:56:28

+0

已編輯! @AndrewThompson – faizanjehangir 2012-03-26 05:35:25

+2

我不知道你爲什麼回覆我告訴我你的編輯。我仍然在等待*** SSCCE。*** – 2012-03-26 06:28:42

回答

0

您似乎正在使用一個我不知道的GridBagConstraints子類(變量pos),儘管我可以從上下文中猜測它的功能。

假設您的問題是,你希望candidates面板是在cellPanel的左邊,而不是它上面,你需要換裏面加了candPanelnew Gap(GAP)線路如下:

content.add(buttonPanel, pos.nextCol().expandW()); 
content.add(new Gap(GAP), pos.nextRow()); // These two lines 
content.add(candPanel, pos.nextRow());  // swapped over 
content.add(cellPanel, pos.nextCol()); 
content.add(numPanel,pos.nextCol().expandW());