4

私は次のものを持っています、

GridLayout layout = new GridLayout(4, 0);

5アイテムがある場合、これにより2列が作成され、最初の列には3行が含まれ、2番目の列には2行が含まれます。これは私が望んでいることでも、私が期待していたことでもありません。4最初の列には行が含まれ、2番目の列には行が含まれると予想しました1

このレイアウトマネージャーが、列ごとに必要な行数を尊重しないのはなぜですか?または、さらに良いことに、このレイアウトマネージャーにこれを尊重させるにはどうすればよいですか?

4

3 に答える 3

6

結果は予想どおりです。「列数を指定すると、行数がゼロに設定されている場合にのみレイアウトに影響します。」

ここJListに示すように、を使用して目的の効果を得ることができます。

private static final int N = 5;
...
list.setLayoutOrientation(JList.VERTICAL_WRAP);
list.setVisibleRowCount(N - 1);

画像

于 2013-01-30T16:58:50.897 に答える
4

免責事項:これは具体的な回答として提供されているのではなく、SSCCEの有用性のポイントを証明するために提供されています...

GridLayoutコンストラクターはGridLayout(int rows,int cols)(@AndrewThompsonが彼の回答で言ったように、私が言及する理由は、の行/列のパラメーターを混同した可能性があるようですLayoutManager)です。したがって4,0、4行と可変量の列が得られます。

4つのラベルを追加すると、4つの行と1つの列が得られます(予想どおり)。

ここに画像の説明を入力してください

5つのラベルを追加すると、3つの行と2つの列があり、最後の1つを除いてそれぞれ2つのアイテムがあります。

ここに画像の説明を入力してください

IMOは、GridLayout列/行の数> 0(0未満で、LayoutManagerが量を計算する)を尊重する必要があると予想されます。したがって、許可されている行よりも多くのコンポーネントを追加すると、新しい列> 0が作成されますが、0および1として>1も作成されます。同じことを実行します。したがって、4x0のグリッドを5つのコンポーネントで埋めると、2つの列が作成されます。各行に2つのコンポーネントがあり(各列に対して)、残りが最後の行(コンポーネントの量によっては必ずしも最後の行である必要はありません)にあると予想されます。 8は、現在の4x2のように最後の行まで埋めますが、9つのコンポーネントを追加するとGridLayout、4x3のaが発生します-新しい行に移動する前に、行のすべての列を埋めます)

問題を再現するSSCCEを投稿してください。そうしないと、ここで推測しているのは、私が作成した例であり、あなたが言った/取得したものとは異なる動作を示します。

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        GridLayout layout = new GridLayout(4, 0);
        frame.setLayout(layout);

        for (int i = 0; i < 5; i++) {
            frame.add(new JLabel(String.valueOf(i + 1)));
        }

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Create Swing components on EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}
于 2013-01-30T16:53:11.640 に答える
2

指定したGridLayoutの列数は0です。つまり、列数はレイアウトによって決定されます。この場合、アイテムの数に基づいて必要な列の数を計算しようとします。

4つのコンポーネントを追加すると、それぞれ1つのコンポーネントを持つ4つの行が得られます。5つのコンポーネントを追加する場合、2つの列が必要であり、コンポーネントが順番に入力されます。つまり、3行のみが消費されます。

したがって、コンポーネントの数によっては、指定されたすべての行が使用されているかどうかがわかります。たとえば、7つのコンポーネントを試してみてください。

于 2013-01-30T16:58:05.363 に答える