如何使用MiGLayout将组件置于包含多个组件的行上

大约一个半月前我开始使用MiGLayout,一切都很简单,效果很好。 我还有一个问题,我无法修复。

假设我想要一行在最右侧有两个按钮和一个居中的标题,当我这样做时,标题实际上并没有居中:

(“这个是JPanel”)

this.add(labelTitle, "split, span, center"); this.add(closeButton, "east"); this.add(mainMenuButton, "east"); 

发生的事情是“labelTitle”在放置按钮后的剩余可用空间中居中,但我实际上希望它相对于整个JPanel而不是仅剩余空间居中。

我可以使用哪些参数来获得所需的效果? 我知道我可以使用绝对定位,但我不想这样做,因为它在我的案例中首先击败了使用MiGLayout的目的。

你能找到这样的东西吗?

干杯!

 public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(new MigLayout("debug")); panel.add(new JLabel("Label Title"), "x2 min(b1.x - unrel, (container.w+pref)/2)"); panel.add(new JButton("Close Button"), "id b1, pushx, alignx right"); panel.add(new JButton("Main Menu Button"), "alignx right"); frame.add(panel); frame.setSize(800, 200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setVisible(true); } 

您可以使用JXLayer并将按钮放在玻璃板上。

 JButton closeButton = new JButton("Close"); JButton mainMenuButton = new JButton("Menu"); JLabel labelTitle = new JLabel("Application"); JPanel panel = new JPanel(); panel.setLayout(new MigLayout(new LC().fillX())); panel.add(labelTitle, new CC().alignX("center").spanX()); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new MigLayout(new LC().fillX())); buttonPanel.add(closeButton, new CC().alignX("right").split()); buttonPanel.add(mainMenuButton, new CC().alignX("right")); buttonPanel.setOpaque(false); JXLayer mainPanel = new JXLayer(); mainPanel.setView(panel); mainPanel.setGlassPane(buttonPanel); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(mainPanel); frame.setSize(400, 600); frame.setVisible(true); 

创建JPanel时,请使用以下MigLayout初始化程序:
new MigLayout("","[]push[center]push[]","")

如果您不了解约束,请在此处查看: MigLayout白皮书

这假设你在这个JPanel中没有任何其他东西……