【问题标题】:Aligning buttons with box component将按钮与框组件对齐
【发布时间】:2013-10-21 22:53:42
【问题描述】:

所以我想创建这样的东西:

最后我取得了一些进展,但我很困惑为什么我的按钮没有与中心对齐,以及为什么它没有在它们之间产生间隙。

这是我的代码:

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

//buttons
final JButton btn1 = new JButton(play);
btn1.setBorder(BorderFactory.createEmptyBorder());
btn1.setContentAreaFilled(false);
btn1.setAlignmentX(Component.CENTER_ALIGNMENT);
btn1.getModel().addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent e) {
        ButtonModel model = (ButtonModel) e.getSource();
        if (model.isRollover())
            btn1.setRolloverIcon(playro);
    }
});
final JButton btn2 = new JButton(instructions);
btn2.setBorder(BorderFactory.createEmptyBorder());
btn2.setContentAreaFilled(false);
btn2.setAlignmentX(Component.CENTER_ALIGNMENT);
btn2.getModel().addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent e) {
        ButtonModel model = (ButtonModel) e.getSource();
        if (model.isRollover())
            btn2.setRolloverIcon(instructionsro);
    }
});     

canvas.add(btn1);
canvas.add(Box.createHorizontalStrut(10));
canvas.add(btn2);

这是它创建的:

我做错了什么?

编辑:修复了按钮之间的间隙问题。我意识到我没有将它添加到画布上。但仍然对对齐问题感到困惑。

【问题讨论】:

    标签: java swing alignment boxlayout


    【解决方案1】:

    BoxLayout 不是您应该用于该任务的最佳布局。我建议将BorderLayoutFlowLayout 结合使用。所以,是这样的:

    canvas.setLayout(new BorderLayout());
    
    JPanel bottomPanel = new JPanel(); // Panel where you can
    // place those buttons (by default,
    // FlowLayout has been set on it)
    bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 30, 0));
    canvas.add(bottomPanel, BorderLayout.SOUTH);
    bottomPanel.add(btn1);
    bottomPanel.add(btn2);
    

    【讨论】:

    • 谢谢你这似乎工作得很好。我只是想知道;如何将 JPanel 稍微向上移动?
    • 移动是什么意思?另外,如果有帮助,请考虑接受答案。
    • 考虑使用PAGE_END 而不是SOUTH,因为Java 鼓励使用前者而不是后者,因为1.4 :-)
    • 哦,是的,我明白了。您可以通过确定差距来做到这一点。但在这种情况下,您必须为您的 bottomPanel 手动设置 FlowLayoutbottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));感谢@nIcEcOw 的提示。
    • 噢!我犯了一个错误。请改用BorderFactorybottomPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 30, 10)); 第三个参数确定距底部的间距。
    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2019-08-06
    • 1970-01-01
    • 2020-12-30
    • 2022-07-07
    • 2012-05-23
    相关资源
    最近更新 更多