【问题标题】:swing: Aligning JPanels in a BoxLayoutswing:在 BoxLayout 中对齐 JPanel
【发布时间】:2012-07-28 22:21:57
【问题描述】:

我有一个 JPanel (panel),其布局设置为 BoxLayout。我还有一个自定义类MapRow,它扩展了JPanel(并在一个简单的FlowLayout中包含了一些组件),我希望将MapRow的实例添加到panel中一个简单的左对齐,自上而下的时尚。考虑以下方法:

public void drawMappingsPanel(JPanel panel) {
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

        int s = /* aMethodCall() */;
        for (int i = 0; i < s; i++) {
            MapRow row = new MapRow();
            row.setAlignmentX(LEFT_ALIGNMENT);
            panel.add(row);
        }
    }

但是,当我运行代码时,所有MapRow 面板都居中对齐,如下所示:

如何将MapRow 面板向左对齐? setAlignmentX(LEFT_ALIGNMENT) 方法似乎不起作用...

编辑:我刚刚用虚拟JButtons 替换了MapRow 的实例,它们左对齐很好。那么JButtons之类的组件可以使用setAlignmentX()左对齐,但是JPanels就不行?

【问题讨论】:

  • 发布您的完整代码,以便有人可以帮助您
  • 使用不同的布局管理器,例如MigLayout
  • @sunil 请不要完整代码....只是SSCCE
  • @sunil 和SSCCE 是重现问题的示例代码,但其中不需要重现问题的任何内容都已被修剪。在SSCCE 网站上阅读更多信息
  • FlowLayout 的对齐方式是什么?是LEFT吗?默认情况下,FlowLayout 是CENTER-aligned。此外,查看正在发生的事情的一个简单技巧是在面板上设置边框(在您的情况下为 MapRow),以便您可以可视化面板的实际边界。

标签: java swing


【解决方案1】:

您应该在 MapRow 中为 FlowLayout 使用左对齐。这是一个小的SSCCE 说明:

import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestJPanels {

    protected void initUI() {
        final JFrame frame = new JFrame(TestJPanels.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        for (int i = 0; i < 5; i++) {
            JLabel label = new JLabel("Label-" + i);
            label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
            JPanel insidePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
            insidePanel.add(label);
            insidePanel.setBorder(BorderFactory.createLineBorder(Color.RED));
            panel.add(insidePanel);
        }
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestJPanels().initUI();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2014-07-17
    • 2019-05-06
    • 2014-09-17
    相关资源
    最近更新 更多