2014-01-31 148 views
0

我遇到了GridBagLayout問題。GridBagLayout故障

用戶選擇一個文件,如果該文件大於我在其中顯示的JTextArea,共享GridBagLayout中的所有Swing組件都會出現故障。如果它能夠適應JTextField,那麼所有的Swing組件都可以。

這裏是JFrame佈局我渴望的screenshot

Want

而且hereJFrame佈局,我得到當含有文件路徑JTextArea比指定大小大。

Have

所有其他JTextFields受到影響,以及下面的按鈕。我不在乎JTextArea中的文字是否大於其尺寸,我只是希望所有的擺動組件保持不變。

下面是代碼,我添加Swing組件到文件信息面板:

//Setup layout. 
    gbc = new GridBagConstraints(); 
    //File info panel. 
    gbc.insets = new Insets(3, 10, 3, 10); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    info_panel.add(first_name_jta, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 0; 
    info_panel.add(first_name_tf, gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    info_panel.add(last_name_jta, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 1; 
    info_panel.add(last_name_tf, gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 2; 
    info_panel.add(frame_type_jta, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 2; 
    info_panel.add(frame_type_cb, gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 3; 
    info_panel.add(eye_size_jta, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 3; 
    info_panel.add(eye_size_tf, gbc); 

    //Frame panel. 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.gridwidth = 2; 
    gbc.fill = GridBagConstraints.BOTH; 
    frame_panel.add(file_path_tf, gbc); 
    gbc.gridy = 1; 
    frame_panel.add(info_panel, gbc); 
    gbc.gridy = 2; 
    gbc.insets = new Insets(10, 60, 10, 60); 
    gbc.fill = GridBagConstraints.NONE; 
    gbc.anchor = GridBagConstraints.WEST; 
    frame_panel.add(save_button, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 2; 
    gbc.anchor = GridBagConstraints.EAST; 
    frame_panel.add(cancel_button, gbc); 

任何想法?

回答

0

好的,這需要一點努力。

基本上,當你建立了frame_panel,您使用gridwidth = 2file_path_tfinfo_panel,這是一切優秀的好,但你永遠不重置屬性,當您添加的按鈕。

這意味着save_button可以佔據列0和1 cancel_button可以佔據1和2

重置gridwidth屬性您已經添加了info_pane後您添加的按鈕之前

gbc.gridwidth = 1; 

而且,我想你會發現JLabel更容易處理然後JTextArea s標籤領域,但這只是我。

+0

文件路徑是一個'JTextField'。當JTextField具有更大的值時,所有東西都會縮小。當它的值較小時,每個組件都被設置爲其默認大小。 – Foxslaughter

+0

你能提供一個可運行的例子嗎,你的代碼讓我失望;) – MadProgrammer

+0

我盡我所能將你的代碼示例重構爲一個可運行的示例並更新了答案 – MadProgrammer