好的,你的描述有点混乱(或者我今天仍然太累了,或者咖啡因还没有足够)。你从别人那里“调用”面板类的概念也有点奇怪。
但是据我所见,你的第一个选择是正确的。
一般来说你只是窝在运行时的对象,所以它可能看起来有点像下面这样:
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