- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 MigLayout 有一些奇怪的行为。我有一个 SSCCE 反射(reflect)了我的问题。基本上,顶部两个面板之间有一个间隙(该间隙属于左侧单元格)。其他一切都如我所愿。仅当 JFrame
调整大小且足够大时才会出现间隙。
左侧面板(名为Measurement
)应具有固定宽度,而中间面板(名为Config
)为pushx、growx
并且因此,应该填充该行中其他两个组件留下的所有空间。但左侧面板单元似乎占用了剩余空间。
如何删除该空间(以便配置面板直接接触测量面板并且测量面板的宽度恰好为 500 像素)?
我正在使用 MigLayout 4.0。
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import net.miginfocom.swing.MigLayout;
public class Main {
private static JButton minimizeButton;
private static JPanel configPanel, plotPanel, measPanel;
public static void main(final String[] args) {
final JFrame frame = new JFrame("test");
frame.setLayout(new MigLayout("insets 10, hidemode 3, debug", "", ""));
frame.add(getMeasPanel(), "w 500!");
frame.add(getConfigPanel(), "left, grow, pushx");
frame.add(getMinimizeButton(), "right, top, wrap");
frame.add(getPlotPanel(), "spanx 3, grow, push, wrap");
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static JPanel getConfigPanel() {
if (configPanel == null) {
configPanel = new JPanel(new MigLayout("insets 10"));
configPanel.add(new JLabel("test123"), "spanx 2, wrap");
configPanel.add(new JLabel("test123"), "h 40!");
configPanel.add(new JLabel("test123"), "right, wrap");
configPanel.setBorder(BorderFactory.createTitledBorder(null,
"Plot", TitledBorder.LEFT, TitledBorder.TOP, new Font(
"null", Font.BOLD, 12), Color.BLUE));
}
return configPanel;
}
private static JButton getMinimizeButton() {
if (minimizeButton == null) {
minimizeButton = new JButton("_");
minimizeButton.setFocusPainted(false);
minimizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
toggleConfigMinimize();
}
});
}
return minimizeButton;
}
private static JPanel getPlotPanel() {
if (plotPanel == null) {
plotPanel = new JPanel();
plotPanel.setBorder(BorderFactory.createTitledBorder(null,
"Plot Config", TitledBorder.LEFT, TitledBorder.TOP,
new Font("null", Font.BOLD, 12), Color.BLUE));
}
return plotPanel;
}
private static JPanel getMeasPanel() {
if (measPanel == null) {
measPanel = new JPanel(new MigLayout("insets 10"));
measPanel.add(new JLabel("test123"), "spanx 2, wrap");
measPanel.add(new JLabel("test123"), "h 40!");
measPanel.add(new JLabel("test123"), "right, wrap");
measPanel.add(new JLabel("test123"), "spanx 2, wrap");
measPanel.add(new JLabel("test123"), "spanx 2, wrap");
measPanel.setBorder(BorderFactory.createTitledBorder(null,
"Measurement", TitledBorder.LEFT, TitledBorder.TOP,
new Font("null", Font.BOLD, 12), Color.BLUE));
}
return measPanel;
}
private static boolean showConfig = true;
protected static void toggleConfigMinimize() {
showConfig = !showConfig;
getMeasPanel().setVisible(showConfig);
getConfigPanel().setVisible(showConfig);
}
}
最佳答案
解决方案是在列约束中定义配置列的增长行为:
frame.setLayout(new MigLayout("insets 10, hidemode 3, debug",
"[][fill, grow][]", ""));
frame.add(getMeasPanel(), "w 500!");
frame.add(getConfigPanel(), "left, grow");
frame.add(getMinimizeButton(), "right, top, wrap");
frame.add(getPlotPanel(), "spanx 3, grow, wrap, push");
推送单元限制有一些怪癖(阅读:我个人并不完全理解的行为:-),所以我倾向于尽可能地回避它们。另外,我的偏好是在布局约束中定义 wrap 3
。
更新:
刚刚想起了一个怪癖:跨越绘图行中的push(实际上是隐含的pushx)才是真正的罪魁祸首——它的多余空间进入了它的第一列。想一想,这种行为也不是那么不合理,毕竟细胞约束是关于……细胞的,它们不太关心其他细胞。
因此,另一个解决方案是仅在 y 中使绘图有插入力(x 插入已由其上方第二列中的配置单元格处理)
frame.setLayout(new MigLayout("insets 10, hidemode 3, debug",
// cell constraints are empty in original
"",
""));
// meas should have a fixed size
frame.add(getMeasPanel(), "w 500!");
// the config should get all excess space when growing
frame.add(getConfigPanel(), "left, grow, pushx");
frame.add(getMinimizeButton(), "right, top, wrap");
// remove implicit the pushx
frame.add(getPlotPanel(), "spanx 3, grow, wrap, pushy");
我的偏好是第一个:在(约束)层次结构中尽可能多地进行配置,使 ui 代码比将它们分散在单元格中更易于维护。
关于java - MigLayout:奇怪的间隙行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841467/
右侧面板包含所有按钮,我想与底部对齐。 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
我是一名优秀的程序员,十分优秀!