2011-11-30 119 views
1

我有一個問題。Java網格佈局和JPanel

我有以下程序,我遇到了一件事情的麻煩。我已經創建了一個網格佈局,並且我使用JPanel在網格中輸入按鈕和文本,但是如果我的文本很長,一切似乎都會改變大小。有人可以幫助我如何防止這種情況發生?

這是我的代碼:

package JFrameTester; 

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



public class JFrameTester { 


public JPanel createContentPane(){ 

     JPanel panel = new JPanel(); 
     JButton button1,button2,button3,button4; 

     JPanel mainPanel = new JPanel(new GridLayout(2, 0, 40, 10)); 

     //JPanel red = createSquareJPanel(Color.red, 50); 
     button1 = new JButton ("button1"); 
     button2 = new JButton ("button2"); 
     button3 = new JButton ("button3"); 
     button4 = new JButton ("button4"); 
     Label one = new Label("Rohihtjthjhtjghjghmgfjgjghjghj"); 
     //add(button1); 


     mainPanel.add(button1); 
     mainPanel.add(one); 
     mainPanel.add(button2); 
     mainPanel.add(button3); 
     mainPanel.add(button4); 


     panel.add(mainPanel); 
     panel.setOpaque(true); 
     return panel; 
    } 


    public static void main(String[] args) { 

     JFrame frame = new JFrame("GridLayout"); 
     JFrameTester Display = new JFrameTester(); 
     frame.setContentPane(Display.createContentPane()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 


} 
} 

回答

4

這就是佈局管理器做的;他們爲每個組件分配足夠的空間。您可以嘗試將HTML嵌入到JLabel實例中以便進行換行。否則,你只能忍受它。

請注意,默認情況下JPanel實例不透明也很重要。

1

那麼......首先要做的第一件事。你聲明瞭2行0列的GridLayout。這正是你想要的嗎?我想不是。

下一部分是您添加內容的位置。網格通常保持動態大小。它會縮小細胞到儘可能最小的值。但是當一些內容變大(文本的大jPanels)時,它會擴展單元格。

根據單元格的內容,它們將保持靜態或試圖填充所有可用空間。

如果我正確地閱讀你的問題,你想要做的是通過使用JComponentsSee JavaDoc link here的功能爲你的JButtons設置一個靜態大小。您可能想要爲每個按鈕使用setMaximumSize(new Dimension(width,height));

有意義嗎?

在側面說明。如果您想更好地控制您的佈局,請使用GrabBagLayout。更多的工作,但更多的控制。

+2

如果@Led k組的'JLabel'實例的最大尺寸(這是給他悲傷的成分),它的一些文本將丟失。 – mre

+1

不應該是'GridBagLayout'嗎? –

+0

仍然無法讓它工作:) – Led

0

這是一個較舊的帖子,但我只是偶然發現了這一點,而搜索同一問題。使用frame.pack()用於移動所有內容以適合給定的面板大小。所以如果你增加一件東西的尺寸,其他東西會縮小並移動以適應面板。

來源:http://www.macs.hw.ac.uk/guidebook/?name=JFrame&page=2