一部の Swing コードを読みやすくするために、InlineGridBagConstraints
次のようなクラスを作成しました。
public class InlineGridBagConstraints extends GridBagConstraints {
public InlineGridBagConstraints gridx(int x) {
gridx = x;
return this;
}
public InlineGridBagConstraints gridy(int y) {
gridy = y;
return this;
}
public InlineGridBagConstraints gridheight(int h) {
gridheight = h;
return this;
}
public InlineGridBagConstraints gridwidth(int w) {
gridwidth = w;
return this;
}
// .... and so on, for all fields.
}
意図は、この種のコードを変更することです:
GridBagConstraints c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 3;
myJPanel.add(myJButton, c);
c.gridx = 3;
c.gridwidth = 2;
myJPanel.add(myOtherJButton, c);
c.gridx = 1;
c.gridy = 5;
c.gridheight = 4;
myJPanel.add(yetAnotherJButton, c);
...次のように、理解しやすく読みやすいものを使用します。
InlineGridBagConstraints c = new InlineGridBagConstraints();
myJPanel.add(myJButton, c.gridx(2).gridy(1).gridwidth(3));
myJPanel.add(myOtherJButton, c.gridx(3).gridy(1).gridwidth(2);
myJPanel.add(yetAnotherJButton, c.gridx(1).gridy(5).gridheight(4);
ただし、上記のコードは機能しません。試してみると、すべてのコンポーネントが の中央の同じ領域を占め、JPanel
互いに重なっています。では間隔が空けられていませんGridBagLayout
。ただし、通常のバージョンで醜いバージョンを使用すると、GridBagConstraints
意図したとおりに完全に機能します。
おそらくそれが問題であると考えて(そうあるべきではありませんが)、に型キャストしてみInlineGridBagConstraints
ましたが、まったく役に立ちませんでした。GridBagConstraints
アイデアが尽きた。なぜこれが発生しているのか、または最初の (標準) 実装と 2 番目の (インライン) 実装の主な違いは何ですか?