6

方向にaJPanelを使用するaBoxLayoutがありX_AXISます。私が抱えている問題は、画像で最もよく示されています。 代替テキスト

ご覧のとおりJPanel、左側は上部に配置されているのではなく、中央に配置されています。両方を上に揃えて左から右に積み重ねてほしいのですが、このレイアウトマネージャーでこれを実現するにはどうすればよいですか?私が書いたコードは次のとおりです。

public GameSelectionPanel(){

    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

    setAlignmentY(TOP_ALIGNMENT);

    setBorder(BorderFactory.createLineBorder(Color.black));

    JPanel botSelectionPanel = new JPanel();

    botSelectionPanel.setLayout(new BoxLayout(botSelectionPanel, BoxLayout.Y_AXIS));

    botSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.red));

    JLabel command = new JLabel("Please select your opponent:"); 

    ButtonGroup group = new ButtonGroup();

    JRadioButton button1 = new JRadioButton("hello world");
    JRadioButton button2 = new JRadioButton("hello world");
    JRadioButton button3 = new JRadioButton("hello world");
    JRadioButton button4 = new JRadioButton("hello world");

    group.add(button1);
    group.add(button2);
    group.add(button3);
    group.add(button4);

    botSelectionPanel.add(command);
    botSelectionPanel.add(button1);
    botSelectionPanel.add(button2);
    botSelectionPanel.add(button3);
    botSelectionPanel.add(button4);

    JPanel blindSelectionPanel = new JPanel();
    blindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.yellow));

    blindSelectionPanel.setLayout(new BoxLayout(blindSelectionPanel, BoxLayout.Y_AXIS));

    JRadioButton button5 = new JRadioButton("hello world");
    JRadioButton button6 = new JRadioButton("hello world");

    ButtonGroup group2 = new ButtonGroup();
    group2.add(button5);
    group2.add(button6);

    JLabel blindStructureQuestion = new JLabel("Please select the blind structure:");

    blindSelectionPanel.add(blindStructureQuestion);
    blindSelectionPanel.add(button5);
    blindSelectionPanel.add(button6);

    add(botSelectionPanel);
    add(blindSelectionPanel);

    setVisible(true);
}
4

2 に答える 2

5

RiduidelsetAlignmentYは、GameSelectionPanelそれ自体の設定について正しくGridBagLayout、優れた代替手段です。に固執したい場合は、配置問題の修正BoxLayoutという記事でこの問題について説明し、「左から右への Boxlayout によって制御されるすべてのコンポーネントは、通常、同じ Y 配置にする必要がある」ことを示唆しています。あなたの例では、追加します

botSelectionPanel.setAlignmentY(JPanel.TOP_ALIGNMENT);
blindSelectionPanel.setAlignmentY(JPanel.TOP_ALIGNMENT);
于 2010-03-11T16:54:53.917 に答える
2

Well, the setAlignmentY method has no effect here, since it acts on the panel considered as a component.

As you have guessed, the layout of contained panels is defined by the layout manager you use. Unfortunatly, BoxLayout do not provide the kind of feature you're looking at.

in standard JDK, obviously, the layout of choice for your problem is GridBagLayout. Although rather hard to understand at first, it will fast reveal to you its power in components arrangement.

using the useful GBC class, your components could be arranged as such :

setLayout(new GridBagLayout(this));

add(botSelectionPanel, new GBC(0,1).setAnchor(TOP));
add(blindSelectionPanel, new GBC(0,2).setAnchor(TOP));

or I think so ;-)

于 2010-03-11T14:10:11.557 に答える