Java の Swing を使用すると、目的のレイアウトを実現するために、要素を他の要素でラップする必要があることがよくあります。ただし、これらのパネルの要素は、たとえばフォーム送信時にスーパーパネル (ビューとも呼ばれます) からアクセスできる必要があります。
次の (簡略化された) 例を考えてみましょう。
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
をビューに配置する必要があります。
もちろん、解決策の 1 つは、すべての要素を適切なラッパー クラスに配置し、それをpublic
+final
にするか、膨大な量を作成することですgetters & setters
。
しかし、これを達成するためのもっときれいなOOPの方法があると確信していますか?