gpt4 book ai didi

java - miglayout中的相对布局

转载 作者:行者123 更新时间:2023-12-02 12:07:57 24 4
gpt4 key购买 nike

我正在尝试使用 Miglayout 对齐 Jpanel 上的三个按钮。 Button1 与 Jpanel 的 50% 50% 对齐,Button2 和 Button3 彼此相邻对齐 50% 80%。看起来这应该很容易,但我无法让所有按钮正确对齐。这是我的代码片段:

      panel = new JPanel();
panel.setLayout(new MigLayout());
this.add(panel);// add to JFrame
JButton Button1 = new JButton("Button 1");
Button1.setPreferredSize(new Dimension(200,70));
JButton Button2 = new JButton("Button 2");
Button2.setPreferredSize(new Dimension(200,70));
JButton Button3 = new JButton("Button 3");
Button3.setPreferredSize(new Dimension(200,70));
panel.add(Button1, "push,align 50% 50%");
panel.add(Button2, "split,align 50% 80%");
panel.add(Button3, "push,align 50% 80%");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.pack();

正如您在附图中看到的,水平对齐方式并不符合预期。但是,如果我仅添加 Button1 或 Button2 和 Button3,则对齐是正确的。我该如何修复它? enter image description here

最佳答案

MigLayout并不是真正设计成这样工作的。这并不是说不可能,因为有一些解决方法,但它们并不理想。

方式MigLayout工作原理是它使用网格来放置组件。当您将组件添加到使用 MigLayout 的容器时作为布局,它以水平顺序添加它们。

方式align属性的工作原理是,它尝试将该行的单元格相对于您当前所在的行和列尽可能地与您要求的位置对齐。它不允许这些单元格重叠。

这就是为什么它似乎对你不起作用,因为你试图使单元格重叠。

因此,对于您正在做的工作,您至少需要 2 行,然后计算如何相对于每行对齐组件。解决方法部分对此进行了解释。

您可以通过设置 MigLayout 来查看代码的实际情况。布局为debug模式为 new MigLayout("debug") .

你的尝试

Your Attempt

<小时/>

解决方法

您可以使用一些简单的权重结合一点数学来实现这一点。

  • 第 1 步 - 为要增长的行高指定权重。我为第一列选择了 70,为第二列选择了 30。这意味着当行获得分配的高度空间时,如果有空间,第一行将占用 70% 的空间,第二行将占用 30% 的空间。

  • 第 2 步 - 使用此权重计算出整个容器上 50% 和 80% 的垂直位置。在这种情况下,50/70 ≈ 71% 和 10/30 ≈ 33%。 (10来自80% - 70%)

  • 第 3 步 - 使用这些垂直对齐图形来排列按钮。

My Attempt

可运行示例

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame("Relative Panel");
JPanel panel = new JPanel(new MigLayout("", "", "[grow 70][grow 30]"));

JButton Button1 = new JButton("Button 1");
Button1.setPreferredSize(new Dimension(200,70));
panel.add(Button1, "push,align 50% 71%, wrap");

JButton Button2 = new JButton("Button 2");
Button2.setPreferredSize(new Dimension(200,70));
panel.add(Button2, "split,align 50% 33%");

JButton Button3 = new JButton("Button 3");
Button3.setPreferredSize(new Dimension(200,70));
panel.add(Button3, "push,align 50% 33%");

frame.add(panel);
frame.setPreferredSize(new Dimension(800, 800));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - miglayout中的相对布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46755612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com