2012-06-12 47 views
0

在Java項目中我的工作,我的約束最初設置爲:需要幫助瞭解一些列約束行爲

JPanel panel = new JPanel(); 
String layoutConstraints = "fill"; 
String columnConstraints = "[right]rel[grow]"; 
String rowConstraints = "[]10[]"; 
panel.setLayout(new MigLayout(layoutConstraints, columnConstraints, rowConstraints)); 

從我瞭解的文檔的最後差距和約束將重複每一個的排超過規格。 (參見「如果格式字符串中的行少於該維度中的網格單元格中的行數,則最後的間隔和行約束將用於額外的行」)。

因此,對於我理解的所有應該意味着行約束實際上是[]10[]10[]10[]等等。

我的問題是當我在JScrollPane一個JTextArea具有行設置爲3:

JLabel label = new JLabel("Text area"); 
JTextArea text = new JTextArea("Test", 3, 40); 
JScrollPane scroll = new JScrollPane(text); 
panel.add(label); 
panel.add(scroll, "grow,wrap"); 

當的[]10[]行限制使用的只有1行高,但是當我改變

String rowConstraints = "[]10[]"; 

String rowConstraints = "[]"; 

突然使用了完整的3行高,我符合規範適用於JTextArea。

我誤解了行約束是如何工作的還是在工作中還有別的東西,我完全沒有看到/理解?

回答

1

在兩種情況下使用的是隻有一個佈局行(含有JTextArea,第二列)(由MigLayout管理即行)到你把JLabel(第一列)和JScrollPanel

您可以輕鬆地通過簡單地增加「調試」來佈局約束可視化MigLayout行和列結構:

String layoutConstraints = "fill,debug"; 

和啓動應用程序。我真的建議在處理佈局時使用此設置。

您爲JTextArea設置的行屬性與佈局行無關。此屬性只告訴JTextArea分量什麼尺寸,它會嘗試有,如javadocs定義:

java.awt.TextArea中具有被用來確定首選大小兩個屬性的行和列。 JTextArea中使用這些屬性來表示視口的首選大小的容器的(JPanel的你的情況)的佈局放置一個JScrollPane(...)

JTextArea行內部時,不符合以任何方式行。

請仔細學習(和實驗!)究竟是什麼JTextArearow屬性的意思。

+0

我一直在設計我的用戶界面時一直使用調試,直到完成。 我也知道JTextArea的行與行約束無關。 我的主要問題是,爲什麼,如果'[] 10 []'意味着[] 10 [] 10 [] 10 []'(對於所有行都是如此),爲什麼'[]'的重複行約束'[]'case允許'JScrollPane' +'JTextArea'爲3行(如'JTextArea'指定的那樣),而'[] 10 []'中的'10 []'的重複行約束將它壓到只需1排。 – asmodai

+0

你已經找到解決你的問題的解決方案嗎? –