我在一个半月前开始使用MiGLayout,一切都很简单,效果很好。我还有一个问题,我无法修复。
假设我想要一行在最右侧有两个按钮和一个居中的标题,当我这样做时,标题实际上并没有居中:
(“这个是JPanel”)
this.add(labelTitle, "split, span, center");
this.add(closeButton, "east");
this.add(mainMenuButton, "east");
“labelTitle”会在放置按钮后的剩余可用空间中居中,但我实际上希望它相对于整个JPanel居中,而不仅仅是剩余的空间。
我可以使用哪些参数来获得所需的效果?我知道我可以使用绝对定位,但我不想这样做,因为它在我的案例中首先打败了使用MiGLayout的目的。
答案 0 :(得分: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);
}
答案 1 :(得分: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);
答案 2 :(得分:0)
创建JPanel时,请使用以下MigLayout初始化程序:
new MigLayout("","[]push[center]push[]","")
如果您不了解约束,请点击此处:MigLayout Whitepaper
这假设您在此JPanel中没有任何其他内容......