使用 Java 的 Swing,您通常必须将元素包装在其他元素中以实现所需的布局。然而,这些面板的元素确实需要由超级面板(进一步称为view)访问,例如,在提交表单时。
考虑以下(简化的)示例:
class AddUserView extends JPanel {
private JPanel elementWrapper = new JPanel();
private JPanel buttonWrapper = new JPanel();
private JTextField userNameField = new JTextField();
private JButton submitButton = new JButton("Submit");
public AddUserView() {
// .. add elements to the wrappers
elementWrapper.add(userNameField);
buttonWrapper.add(submitButton);
// .. add listeners etc
// Add the wrappers to the view
add(elementWrapper);
add(buttonWrapper);
}
}
这显然有效,但是我认为这是一个丑陋的解决方案,因为现在view
拥有所有元素,而不是包装器 - 我觉得更合适。更多的是,现在所有(ie)GridBagConstraints
都必须放在视图中。
一种解决方案当然是将所有元素放在适当的包装类中,然后将其设为public
+final
或创建一个 bazillion getters & setters
。
但是,我确信有更漂亮的 OOP 方式来实现这一点?