2013-11-01 52 views
0

我有垂直JSplitPane中的JPanel。 JPanel包含jlabels和jtextfields。當我通過移動JSplitPane的divider來縮小JPanel的高度時,jpanel中的所有組件都會自行調整大小。如何告訴他們在父jpanel的高度縮小時不要調整大小。 我無法調整JPanel的minSize,因爲它使JSplitPane無法移動分隔符。如何告訴GridBagLayout不要調整我的組件的大小

JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     splitPane.setDividerSize(10); 
     splitPane.setOneTouchExpandable(true); 

     JPanel searchPanel = createSearchPanel(); 
     splitPane.setDividerLocation(searchPanel.getPreferredSize().height + 5); 
     splitPane.setTopComponent(searchPanel); 

正如你所見,有searchPanel。讓我們來看看它:

JPanel searchPanel = new JPanel(new GridBagLayout()) { 
      Dimension minSize = new Dimension(200, 0); 

      @Override 
      public Dimension getMinimumSize() { 
       return minSize; 
      } 
     }; 
     searchPanel.setBorder(BorderFactory.createTitledBorder("Search query")); 
     GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 0, 0, 
       GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, 
       new Insets(5, 2, 5, 3), 0, 0); 
     searchPanel.add(eventLabel, gbc); 
     gbc.gridx = 1; 
     gbc.gridwidth = 3; 
     searchPanel.add(eventLabelField, gbc); 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.gridwidth = 1; 
     searchPanel.add(timestampLabel, gbc); 
     gbc.gridx = 1; 
     searchPanel.add(timestampStartField, gbc); 
     gbc.gridx = 2; 
     searchPanel.add(timestammpToLabel, gbc); 
     gbc.gridx = 3; 
     searchPanel.add(timestampEndField, gbc); 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     searchPanel.add(locationLabel, gbc); 
     gbc.gridx = 1; 
     gbc.gridy = 2; 
     gbc.gridwidth = 3; 
     searchPanel.add(locationField, gbc); 
     gbc.gridx = 0; 
     gbc.gridy = 3; 
     gbc.gridwidth = 1; 
     searchPanel.add(durationMagnitudeLabel, gbc); 
     gbc.gridx = 1; 
     gbc.gridy = 3; 
     searchPanel.add(durationMagnitudeMinField, gbc); 
     gbc.gridx = 2; 
     searchPanel.add(durationToLabel, gbc); 
     gbc.gridx = 3; 
     searchPanel.add(durationMagnitudeMaxField, gbc); 
     gbc.gridx = 1; 
     gbc.gridy = 4; 
     gbc.gridwidth = 2; 
     gbc.anchor = GridBagConstraints.PAGE_END; 
     gbc.weighty = 1.0; 
     gbc.ipadx = 2; 
     gbc.ipady = 2; 
     gbc.insets = new Insets(15, 0, 0, 0); 
     searchPanel.add(searchButton, gbc); 

當我向上移動垂直分隔searchPanel的高度縮小和組件的樣子:

enter image description here

你看到JTextFields將得到比他們後,我搬到分頻器小得多up

請幫助我這裏。

回答

2

我已更改您的代碼。使用weightx GridBagConstraint屬性與GridBagConstraints.HORIZONTAL填充,它有助於組件正確填充其單元格。 示例代碼:

JPanel searchPanel = new JPanel(new GridBagLayout()) { 
     Dimension minSize = new Dimension(200, 0); 

     @Override 
     public Dimension getMinimumSize() { 
      return minSize; 
     } 
    }; 
    searchPanel.setBorder(BorderFactory.createTitledBorder("Search query")); 
    GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 0, 0, 
      GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, 
      new Insets(5, 2, 5, 3), 0, 0); 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 1; 
    gbc.gridwidth = 3; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.gridwidth = 1; 
    gbc.weightx = 0; 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 1; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 2; 
    gbc.weightx = 0; 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 3; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 2; 
    gbc.weightx = 0; 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 2; 
    gbc.gridwidth = 3; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 3; 
    gbc.gridwidth = 1; 
    gbc.weightx = 0; 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 3; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 2; 
    gbc.weightx = 0; 
    searchPanel.add(new JLabel("1"), gbc); 
    gbc.gridx = 3; 
    gbc.weightx = 1; 
    searchPanel.add(new JTextField(), gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 4; 
    gbc.gridwidth = 2; 
    gbc.anchor = GridBagConstraints.PAGE_END; 
    gbc.weighty = 1.0; 
    gbc.ipadx = 2; 
    gbc.ipady = 2; 
    gbc.insets = new Insets(15, 0, 0, 0); 
    gbc.weightx = 0; 
    searchPanel.add(new JButton("b"), gbc); 
    return searchPanel; 

關注docs How to use GridBagLayout

結果:

enter image description here

編輯:對不起,我使用的標籤可怕的名字)

+0

我非常喜歡你! –

+0

感謝,GridBagLayout這是強大的佈局,但真正閱讀關於GridBagConstraint屬性的文檔,它將在未來幫助你。 – alex2410

1

在底部添加虛擬JPanel,併爲JPanel設置weightY = 1。 ALl其餘組件的weightY = 0。因此,在高度增加的情況下,所有附加像素都針對假人JPanel

+0

但是當你看到我減少(收縮)頂部面板的高度。然後它的組件變得非常小。不管怎麼說,還是要謝謝你! –

+0

它可以工作,但不適用於這種情況!它可以錨定到頂部的所有組件。我使用JLabel而不是JPanel。但對於這個問題,這是行不通的。 – alex2410

相關問題