- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大面板,其中包含 3 个较小的面板(locationPanel
、usagePanel
、structuralAspectsPanel
)。
每个较小的面板上都有一些 JLabels
和 JCheckBoxes
。我继续将组件集中在每个面板上,但是如何才能将它们集中在所有 3 个面板上呢? (请看中间的黑线)
我尝试在 MigLayout
中使用单元格布局选项(new JLabel("Label here"), "cell 0 0")
,但无法创建相同大小的动态间隙,以便所有组件都居中。使用 gap 200
(180, 300, ...) 将组件“推”到视觉中心似乎可行,但我想避免使用绝对定位/间隙,因为它们可能很容易损坏.
这是我的源代码:
public class RiskAssessmentPage extends JPanel {
JPanel riskAssessmentPanel = new JPanel();
JPanel locationPanel = new JPanel();
JPanel usagePanel = new JPanel();
JPanel structuralAspectsPanel = new JPanel();
public RiskAssessmentPage() {
setLayout(new MigLayout(""));
riskAssessmentPanel.setLayout(
new MigLayout("wrap", "[grow, fill]", "[grow, fill, push][grow, fill, push][grow, fill, push]"));
locationPanel.setLayout(new MigLayout("gap rel 2", "[grow, center][grow, left]"));
locationPanel.setBorder(BorderFactory.createTitledBorder("Location"));
usagePanel.setLayout(new MigLayout("gap rel 2", "[grow, center][grow, left]"));
usagePanel.setBorder(BorderFactory.createTitledBorder("Usage"));
structuralAspectsPanel.setLayout(new MigLayout("gap rel 2", "[grow, center][grow, left]"));
structuralAspectsPanel.setBorder(BorderFactory.createTitledBorder("Structural Aspects"));
locationPanel.add(new JLabel("This is the first of all labels"));
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JSeparator(), "growx, span");
locationPanel.add(new JLabel("Second Label"));
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JSeparator(), "growx, span");
locationPanel.add(new JLabel("This Label is fairly large and long and pushes the text around"));
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JLabel("A label in the usage panel"));
usagePanel.add(new JCheckBox("Checkbox with Label"), "wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JSeparator(), "growx, span");
usagePanel.add(new JLabel("And another one and another one and another one"));
usagePanel.add(new JCheckBox("Checkbox with Label"), "wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JLabel("Label here"));
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JSeparator(), "growx, span");
structuralAspectsPanel.add(new JLabel("I am so uncreative with label names..."));
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JSeparator(), "growx, span");
structuralAspectsPanel.add(new JLabel("Thats it. I give up with naming them."));
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
structuralAspectsPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
riskAssessmentPanel.add(locationPanel);
riskAssessmentPanel.add(usagePanel);
riskAssessmentPanel.add(structuralAspectsPanel);
add(riskAssessmentPanel, "grow, push");
}
}
最佳答案
为了使面板列对齐,您需要将它们设置为相同的大小。在 MigLayout
中,您可以通过将第一列的首选大小和增长率设置为与所有列相同的值来实现此目的。面板。例如
panel1.new MigLayout("", //Unchanged Layout Constraints
"[:500, grow, center][grow, left]", //Column Constraints
""); //Unchanged Row Constraints
panel2.new MigLayout("", //Unchanged Layout Constraints
"[:500, grow, center][grow, left]", //Column Constraints
""); //Unchanged Row Constraints
在此示例中,panel1
和 panel2
的第一列的首选大小均设置为 500,并且增长设置为其默认值,因此这也是一样。
可以在此处查看所描述内容的工作示例
import java.awt.*;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;
public class MigLay extends JFrame {
private MigLay() {
super("Button Layout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new MigLayout("wrap", //Layout Constraints
"grow, fill", //Column Constraints
"grow, fill")); //Row Constraints
createPanels();
pack();
setMinimumSize(getSize()); //Sets minimum size to the preferred size. Remove or change this line if you do not want that to happen
setVisible(true);
}
private void createPanels() {
JPanel locationPanel = new JPanel();
JPanel usagePanel = new JPanel();
JPanel structuralAspectsPanel = new JPanel();
//JLabels for font metrics
JLabel one = new JLabel("This is the first of all labels");
JLabel two = new JLabel("Second Label");
JLabel three = new JLabel("This Label is fairly large and long and pushes the text around");
JLabel four = new JLabel("A label in the usage panel");
JLabel five = new JLabel("And another one and another one and another one");
//Font Metrics
FontMetrics metrics = three.getFontMetrics(three.getFont()); //Take longest label manually or dynamically (You will have to add that code)
int width = metrics.stringWidth(three.getText());
locationPanel.setLayout(new MigLayout("gap rel 2", "[:" + width + ", grow, center][grow, left]"));
locationPanel.setBorder(BorderFactory.createTitledBorder("Location"));
usagePanel.setLayout(new MigLayout("gap rel 2", "[:" + width + ", grow, center][grow, left]"));
usagePanel.setBorder(BorderFactory.createTitledBorder("Usage"));
locationPanel.add(one);
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JSeparator(), "growx, span");
locationPanel.add(two);
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JSeparator(), "growx, span");
locationPanel.add(three);
locationPanel.add(new JCheckBox("Checkbox with Label"), "wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
locationPanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(four);
usagePanel.add(new JCheckBox("Checkbox with Label"), "wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JSeparator(), "growx, span");
usagePanel.add(five);
usagePanel.add(new JCheckBox("Checkbox with Label"), "wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
usagePanel.add(new JCheckBox("Checkbox with Label"), "skip, wrap");
getContentPane().add(locationPanel);
getContentPane().add(usagePanel);
}
public static void main(String[] args) {
new MigLay();
}
}
关于java - 如何使用 MigLayout 将内容集中在多个面板上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37676050/
右侧面板包含所有按钮,我想与底部对齐。 JPanel easternDock = new JPanel(new MigLayout("", "")); easternDock.add(button1,
任何人都可以建议我在哪里可以获得 Miglayout 站点中回调停靠演示应用程序的源代码。这样的教程也可以。谢谢。 最佳答案 有很多断开的链接指向以前的源代码所在的位置。现在演示与 MiG Layou
这里有点不对劲。我试图让最右边的按钮(在下面的示例中标记为“帮助”)与 JFrame 右对齐,并将巨大的按钮的宽度与 JFrame 绑定(bind),但每个按钮至少为 180px。我得到了巨大的按钮约
我正在尝试使结构整齐地居中,但标签和字段之间没有相等的空间,我想我可能不得不使用两列而不是合并它们。 这就是我想要实现的目标: +-----------------------------------
我是新来的,所以对我放宽点。我已经研究了所有关于 miglayout 的文档(顺便说一句,这非常好),但我似乎无法正确显示我想要的网格。 我需要 MigLayout() 参数来设置网格: 2 行,因为
我正在使用 Miglayout 为我的一个面板创建类似表格的布局。我需要所有面板的固定宽度为 200 像素。当我在面板中添加组件时,一切正常,但是当我尝试插入一个具有长文本的按钮(因此需要超过 200
我对 MigLayout 有一些奇怪的行为。我有一个 SSCCE 反射(reflect)了我的问题。基本上,顶部两个面板之间有一个间隙(该间隙属于左侧单元格)。其他一切都如我所愿。仅当 JFrame
我拥有的代码: JPANEL JPanel dadosdaparte = new JPanel(new MigLayout("fillx")); 添加到JPANEL dadosdapa
我有这个面板,它使用 MigLayout 为我的内容创建单元格。这是代码部分: / ====Layout==== setLayout(new MigLayout("hidemode 3
所以我有一个无法解决的问题,我希望我的 GUI 应用程序分为 3 个 JPanel(左、中、右)。我希望左面板和右面板具有固定尺寸,并且中心是流动的。这意味着侧面板仅在 JFrame 展开时垂直展开,
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个扩展类 JComponent 的类,我在其中创建一个带有数字的组件。我想使用 MigLayout 在框架中添加此类对象,但组件没有添加,我只能看到空框架。感谢您的帮助。 用图形创建组件的类 p
我有一个问题想问那些熟悉 MigLayout 或基本 Swing 使用方法的人。 我正在尝试为游戏创建服务器浏览器。 布局最终将如下所示。另外,老实说我不知道该使用什么布局管理器。 +------
我想要发生的是东部和南部的 jetty 移动到窗口的边缘,中间的两个单元填充所有其他空间。相反, jetty 是静态的,拉伸(stretch)窗口只会产生空白空间。 setLayout(new
我正在编写一个应用程序,我希望在其中具有此布局 45% 35% 10% ---------------------
我刚刚开始使用 MigLayout。 我阅读了一些文档,包括 MigLayout 的快速入门指南,并搜索了一些 SO 问题,但没有找到答案。我确信这是显而易见的,但就像我说的,这是我第一次使用这个布局
代码如下: ScreenHeight = Toolkit.getDefaultToolkit().getScreenSize().height, ScreenWidth = Toolkit.getDe
我正在尝试利用 MigLayout 布局管理器创建一个 GUI,允许用户将项目从一个列表移动到另一个列表。我需要箭头靠在一起(垂直)。我遇到的问题是顶部箭头位于单元格的顶部,但我未能成功将其向下移动到
我正在尝试将一个 JTabbedPane 添加到一个面板,上面有用于控件的按钮。我正在使用 MigLayout。 但是,我无法让 JTabbedPane 在按钮不需要时也填充的情况下填充。 参加以下
我目前面临的问题是,有 2 行,MigLayout 似乎强制两个第一个单元格具有相同的宽度,而我希望它们独立工作(注意“Filter”标签太长) ): 除了将两行定义为两个不同的 MigLayout
我是一名优秀的程序员,十分优秀!