2012-10-11 54 views
1

下面的代碼如何設置最後一行或所有行,除了最後不知道MigLayout中的行數?

  int numberofrows = 3; 

      JFrame frame = new JFrame("Question 12844473"); 

      frame.setLayout(new MigLayout("fill, debug", "", "[][][150]")); 

      for(int i=0; i<numberofrows-1; ++i) { 
       frame.add(new JButton("Button #" +i), "wrap"); 
      } 
      frame.add(new JButton("Exit")); 

      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

      frame.pack(); 
      frame.setVisible(true); 

提供下述圖象

enter image description here

也就是說,因爲每個方括號圖案對應於各行第三列中受到設置。

但如何影響最後一行,如果行數不同?或者如何影響所有行?或者如何影響除最後一行以外的所有行,同時分別設置最後一行?

我的意思是不知道行數。

+0

ehhh - 你**不要**擺弄rootPane的佈局(至少會損壞menuBar)。相反,請將佈局設置爲框架的contentPane。 – kleopatra

+0

謝謝!但主要問題呢? –

+0

workforme(關於contentPane) – kleopatra

回答

3

您不能一般設置行限制,以便它們適用於任意數量的行。但是,您始終知道行數,否則您無法渲染該行數。知道了行數,你可以編程生成約束字符串。例如。

String rowConstraint = "" 
rowConstraint += "[]" 
for(int i = 1; i < numberOfRows - 1; i++) { 
    rowConstraint += "[150]" 
}  
rowConstraint += "[]" 

frame.setLayout(new MigLayout("fill, debug", "", rowConstraint)); 
+0

_always知道行數_不知道似乎是問題(據我所知,相當不明確的問題:-) – kleopatra

+0

@Confusion這是我懷疑,但我會等待其他人絕對確定'MigLayout '本身不允許這個我們都不知道的東西... –

+3

[MigLayout的文檔](http://www.migcalendar.com/miglayout/whitepaper.html)說:「如果在格式字符串比那個維度中的網格單元格中的最後一個間隙和行約束將用於額外的行「。對我而言,這意味着你只能爲'其餘行'指定一個約束。沒有辦法爲「最後一行」或「最後一行」以外的所有行指定約束。 – Confusion

1

你的意思,你是在這種情況下:

JFrame frame = new JFrame("Question 12844473"); 

frame.setLayout(new MigLayout("fill, debug", "", "[][][150]")); 

while(0 != (i = hasRow())) 
{ 
    frame.add(new JButton("Button #" +i), "wrap"); 
} 

...現在當hasRow()返回0,這是爲時已晚,因爲你已經添加了一個框架上以前迭代你不能取消它並重新添加其他方式。

你可以這樣說:

prev = hasRow(); 
while(0 != (i = hasRow())) 
{ 
    frame.add(new JButton("Button #" + prev), "wrap"); 
    prev = i; 
} 
// Now prev is the value of the last-but-one element returned 
// and you can process it differently. 
frame.add(new JButton("Button #" + prev)); 

可以將此模式適應,讓你在一個時間返回的行的所有方法,但不知道是否會得到一個EOF來代替。

我沒有進入這樣一個框架添加是否可以完成的問題:這只是一個通用的關閉一個處理技巧,我從一個HTML生成器中分離出來。

相關問題