11

大约一个半月前我开始使用 MiGLayout,一切都很简单而且效果很好。只有一个问题我仍然无法解决。

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

(“这个”是一个JPanel)

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

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

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

4

3 回答 3

6

它可以是你正在寻找的东西吗?

干杯!

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);
}
于 2011-08-12T08:45:54.490 回答
1

您可以使用 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<JPanel> mainPanel = new JXLayer<JPanel>();
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); 
于 2011-08-11T00:13:16.693 回答
0

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

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

这是假设您在此 JPanel 中没有其他任何内容...

于 2011-08-11T15:11:58.423 回答