1

現在、FlowLayout クラスを利用した GUI を作成しています。現在、このクラスは、好みのサイズのメソッドによってコンポーネントを設定できるようにするためのものであり、コンポーネントのサイズを設定する際に優先順位を付ける必要はないと思います。しかし、JTextField に setSize メソッドを使用すると、FlowLayout オブジェクトはサイズ変更コマンドを認識しないようでした。しかし、setColumn メソッドを使用すると、FlowLayout オブジェクトはサイズ変更コマンドに応答しました。

どうしてこれなの?

4

1 に答える 1

1

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;
    }

何だと思う!私はソースコードのファンになりつつあります。

于 2013-10-19T23:50:56.260 に答える