11

GridBagLayoutを使用して、2つのコンポーネント間に垂直JSeparatorを追加したいと思います。私が持っているコードは次のとおりです。

public MainWindowBody(){
    setLayout(new GridBagLayout());

    JPanel leftPanel = new InformationPanel();
    JPanel rightPanel = new GameSelectionPanel();

    JSeparator sep = new JSeparator(JSeparator.VERTICAL);
    GridBagConstraints gbc = new GridBagConstraints();

    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.NORTH;

    add(leftPanel,gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.VERTICAL;

    add(sep,gbc);

    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.NONE;

    add(rightPanel,gbc);
}

しかし、JSeperatorは表示されません、何かアイデアはありますか?

ありがとう

4

2 に答える 2

17

セパレータの優先幅を設定してみてください。

sep.setPreferredSize(new Dimension(5,1));

次に、GridBagLayoutがセパレーターに使用可能なすべての高さを使用するようにします。

gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
于 2010-03-11T14:56:38.503 に答える
7

サンのガイドから引用JSeparator

ほとんどの実装では、垂直セパレーターの優先高さは0、水平セパレーターの優先幅は0です。これは、優先サイズを設定するか、レイアウトマネージャーの制御下に配置しない限り、セパレーターが表示されないことを意味します。 BorderLayoutやBoxLayoutなど、使用可能な表示領域を埋めるためにそれを拡大します。

垂直方向のセパレーターには少し幅があり(水平方向には少し高さがあります)、セパレーターがある場所にスペースが表示されるはずです。ただし、幅と高さが両方ともゼロ以外でない限り、実際の分割線は描画されません。

たぶんあなたは正しい制約を設定する必要がありますか?

于 2010-03-11T14:43:53.787 に答える