好的,你的描述有點混亂(或者我今天仍然太累了,或者咖啡因還沒有足夠)。你從別人那裏「調用」面板類的概念也有點奇怪。
但是據我所見,你的第一個選擇是正確的。
一般來說你只是窩在運行時的對象,所以它可能看起來有點像下面這樣:
InputPanel (has BorderLayout)
+--DetailsPanel (put in BorderLayout.WEST; has GridLayout)
| +--nameLabel
| +--nameTextField
| +--...
+--CrimePanel (put in BorderLayout.NORTH; has GridLayout)
| +--murderRadioButton
| +--arsonRadioButton
| +--...
+--ButtonPanel (put in BorderLayout.CENTER; has GridLayout)
+--button
你通常做這在適當類的構造函數:
public class InputPanel {
public InputPanel() {
this.setLayout(new BorderLayout());
this.add(new DetailsPanel(), BorderLayout.WEST);
this.add(new CrimePanel(), BorderLayout.NORTH);
this.add(new ButtonPanel(), BorderLayout.CENTER);
}
}
public class DetailsPanel {
JLabel nameLabel;
JTextField nameField;
// ...
public DetailsPanel() {
this.setLayout(new GridLayout(5, 1));
nameLabel = new JLabel("Name");
nameField = new JTextField();
// ...
this.add(nameLabel);
this.add(nameField);
// ...
}
}
...
但是,我在這裏看到一個小問題:由於GridLayout
不允許組件跨越多個列,因此您可能需要將其他面板嵌套在左側的DetailsPanel
中。你可以用一個單一的GridBagLayout
它具有所需的能力脫身,或嵌套其他面板有:
DetailsPanel (has BorderLayout)
+--panel1 (has GridLayout with 2 rows, 1 column; put in BorderLayout.NORTH)
| +--nameLabel
| +--nameField
+--panel2 (has GridLayout with 3 rows, 2 columns; put in BorderLayout.CENTER)
+--dayField
+--dayLabel
+--monthField
+--...
儘管如此,中心名稱標籤和文本字段vs並排元素在西部其他地方將需要一些從屬佈局。無論是GridBag整個West還是給它一個BorderLayout,其中一個面板的名稱位於北,其餘的位於另一個位於中心,每個子面板上都有一個網格佈局。 – 2009-10-20 08:33:44
已編輯:)注意到當試圖創建類存根時。 – Joey 2009-10-20 08:34:50