2014-01-15 16 views
1

我正在使用MigLayout將組件添加到Java中的JPanel。 我的問題是,儘管在單元約束中添加了「換行」,但它並不一致。一些組件包裝,有些則不包含 - 在圖像中特別註明最後一行(應該是2行)。MigLayout「包裝」行爲不一致

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0", "","")); 

JButton delete = new JButton("Delete"); 
JButton zoomSel = new JButton("Zoom Sel"); 
JButton zoomReset = new JButton("Zoom Reset"); 

panel.add(delete, "span 2 2, grow"); 
panel.add(zoomSel, "spanx 2, growx, wrap"); 
panel.add(zoomReset,"growx,wrap 5"); 

JButton cut = new JButton("Cut"); 
JButton copy = new JButton("Copy"); 
JButton paste = new JButton("Paste"); 
JButton loopSelRgn = new JButton("Loop Sel. Rgns"); 
JButton selRgnRow = new JButton("Sel Rgns Row"); 

panel.add(cut); 
panel.add(copy); 
panel.add(loopSelRgn, "spanx 2, growx, wrap"); 
panel.add(paste, "spanx 2, growx"); 
panel.add(selRgnRow, "spanx 2,growx,wrap 5"); 

JButton duplicate = new JButton("Duplicate"); 
JButton selectAll = new JButton("Select All"); 
JButton mute = new JButton("Mute"); 
JButton shift = new JButton("Shift"); 

panel.add(duplicate, "span 2 2, grow"); 
panel.add(selectAll, "span 2 2, grow, wrap"); 

panel.add(mute, "spanx 2, growx"); 
panel.add(shift, "spanx 2, growx"); 

編輯:謝謝大家對自己的答案,雖然我的解決辦法是改用比例限制設定的高度,而不是依靠跨度。這似乎解決了纏繞的怪異問題。

回答

1

我不明白爲什麼你用wrap 5時,它看起來像你需要4.我認爲已經達到您只需

  • 使用添加wrap 4到第一構造參數
  • 想要什麼wrap(無參數)的需要
+0

好的方向發展,只是一對夫婦的意見:1)「包裝5」有着不同的含義佈局與組件約束:只有前者意味着「在5個單元之後進行包裝」,而後者意味着「用5的行間隙包裝」b)如果包裝在佈局中定義,則通常不需要將它們添加到組件中 – kleopatra

+0

@kleopatra:感謝您的信息,非常感謝!我很新,想要幫忙,因爲10天沒有答案。 – maaartinus

-1

的技術原因,當每個最後行部分是重複/全選按鈕的行跨度(是故意的嗎?):你是纏繞第一跨區滾裝w,剩下第二個用於以下組件。您可以通過向包裝添加間隙來使該事實可見,如f.i.

panel.add(duplicate, "span 2 2, grow"); 
panel.add(selectAll, "span 2 2, grow, wrap 10"); 

從技術上講,你可以通過一個換行符約束解決這個問題:

panel.add(mute, "newline, spanx 2, growx"); 
panel.add(shift, "spanx 2, growx"); 

一個真正的解決辦法是重構的約束:

  • 此舉儘可能多地進入佈局(如@martinuus已經建議)
  • 使它們儘可能簡單:因爲幾乎所有的按鈕都是跨越單元格,更簡單的替代方法是將它們規範(又名:1列)和分裂剪切/複製

類似:

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0, wrap 2", "","")); 

panel.add(delete, "spany 2, grow"); 
panel.add(zoomSel, "growx"); 
panel.add(zoomReset,"growx"); 

panel.add(cut, "split 2"); 
panel.add(copy); 
panel.add(loopSelRgn, "growx"); 
+0

我喜歡「分裂」技巧。我正在考慮使用三列,但不知道如何使最後一列與第一列和第二列一樣寬,還有差距。有沒有辦法? – maaartinus

+0

不完全確定你到底是什麼,但我會嘗試(雖然沒有:-)在第一行組件約束上的sizegroup – kleopatra