gpt4 book ai didi

java - 当使用 Java 中的 MigLayout 将高度或宽度设置为 100% 时,子级将扩展到其父级的边界

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:01 25 4
gpt4 key购买 nike

我尝试使用 MigLayout 设置某些元素的高度,以使用表达式“高度 100%”占据其父级容器的完整高度,但是 MigLayout 中存在某种反馈循环,导致加载时高度跳至最大值。仅当 MiGPanel 嵌入到 JScrollPane 中时才会出现此问题,如果我删除处理 JScrollPane 的代码行并将 MiGPanel 添加到我的 JFrame 中,则程序将按预期运行。我在其中添加了 boolean 语句以使这个更容易看到。

注意:我已经看到了此修复,但我想使用一个在程序底部没有边距的解决方案。 How to prevent MigLayout from exceeding a container's bounds

这是代码:

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import net.miginfocom.swing.MigLayout;

public class StackOverFlowQuestion {
public static void main(String[] args) {

JPanel MiGPanel = new JPanel();
MiGPanel.setBackground(Color.red);
MiGPanel.setLayout(new MigLayout());

JPanel greenPanel = new JPanel();
greenPanel.setBackground(Color.green);
MiGPanel.add(greenPanel, "pos 0 0, width 33%, height 100%");

JPanel yellowPanel = new JPanel();
yellowPanel.setBackground(Color.yellow);
MiGPanel.add(yellowPanel, "pos 33% 0, width 33%, height 100%");

JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.blue);
MiGPanel.add(bluePanel, "pos 66% 0, width 34%, height 100%");


JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());

boolean scroll = true;
if(scroll){
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(MiGPanel);
scrollPane.setViewportView(MiGPanel);
mainFrame.add(scrollPane);
}else{
mainFrame.add(MiGPanel);
}

mainFrame.add(scrollPane);
mainFrame.pack();
mainFrame.setSize(900, 600);
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}
}

最佳答案

经过许多个不眠之夜,我想出了一个解决方案:

    greenPanel.setLayout(new BorderLayout());
greenPanel.add(new JLabel("test"));
MiGPanel.add(greenPanel, "pos 0 0 33% 100%");

JPanel yellowPanel = new JPanel();
yellowPanel.setBackground(Color.yellow);
MiGPanel.add(yellowPanel, "pos 33% 0 66% 100%");

JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.blue);
MiGPanel.add(bluePanel, "pos 66% 0 100% 100%");

绝对定位元素不应使用 with 和 height 属性,而应使用“pos x y x1 y1”方法。

关于java - 当使用 Java 中的 MigLayout 将高度或宽度设置为 100% 时,子级将扩展到其父级的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867992/

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