FlowLayout オブジェクトがサイズ変更コマンドを認識していないようでした。しかし、setColumn メソッドを使用すると、FlowLayout オブジェクトはサイズ変更コマンドに応答しました。どうしてこれなの?
独自の質問を作成してくださいFlowLayout
。コンポーネントの推奨サイズに従って動作することを知っていることを理解しています。ただし、実際に応答する理由の質問に答えるにはJTextFeild.setColumn(int)
:
が呼び出されるとすぐに、コンポーネントとその上のすべての親setColumn(int)
が無効化され、配置が必要であるとマークされます。JTextFeild
public void setColumns(int columns) {
int oldVal = this.columns;
if (columns < 0) {
throw new IllegalArgumentException("columns less than zero.");
}
if (columns != oldVal) {
this.columns = columns;
invalidate(); // invalidate if column changes
}
}
次に、レイアウト中に、FlowLayout は getPreferredSize()
JTextFeild の関数を呼び出します。この関数は、列幅を追加して優先幅を返すようにオーバーライドおよび実装されます。
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
if (columns != 0) {
Insets insets = getInsets();
size.width = columns * getColumnWidth() +
insets.left + insets.right; // changing the width
}
return size;
}
何だと思う!私はソースコードのファンになりつつあります。