Ada*_*ith 4 java swing miglayout
我有一段时间没有使用MiGLayout,我不记得如何删除组件之间自动放入的空间.我尝试使用以下参数无效(请注意,我想保持水平间距):
novisualpadding
垫0
插图0
growy
这是我的意思的一个例子:

我想要的是将行分为两个.所以第一个和第二个JTextFields行之间不应该有间隙.不过,我想保持第二排和第三排之间的差距.我希望第三和第四行分组,它们之间没有任何间隙,等等.
这是我的布局代码的相关部分(这是在扩展JPanel的类中):
setLayout(new MigLayout("insets 0", "grow"));
//Code to create the JTextFields not shown as it is not relevant
for(int i = 0; i < textFields.length; ++i) {
for(int j = 0; j < textFields[0].length; ++j) {
textFields[i][j].setPreferredSize(new Dimension(80, 50));
if(j == 0 && i % 2 == 0) //If it's the first JTextField in an even row
add(textFields[i][j], "newline, split, gaptop 5, gapright 5");
else if(j == 0 && i % 2 != 0) //If it's the first JTextField in an odd row
add(textFields[i][j], "newline, split, gapright 5");
else //if it's any other JTextField
add(textFields[i][j], "gapright 5");
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我使用循环来遍历所有组件,然后我在奇数行之上设置一个间隙,因为这是我想要在组件中的行之间的空间,而对于其他组件,我设置相同的参数,除了那个间隙.
最后,我将把JPanel中同一行的所有JTextField分组,然后将JPanel添加到布局中,但目前并不重要.
您必须明确设置0宽度间隙,因为默认值是与平台相关的"相关"间隙.您可以在布局级别或行/列级别执行此操作.例如:
setLayout(new MigLayout("gap rel 0", "grow"));
Run Code Online (Sandbox Code Playgroud)
然后,您可以将现有约束用于奇数行.
您必须在LayoutConstraints中删除它,ComponentConstraints中的间隙只能增加默认值,但不能减少.并且记住:永远不要在组件上使用setXXSize :-)相反,如果你真的想要硬编码的大小,那么在LayoutManger中这样做并考虑以独立于屏幕分辨率的方式进行 - 你手中有一个非常强大的野兽.另外:不要重复自己适用于布局以及所有其他代码部分.最好在最高约束层中尽可能多地定义.
一些代码片段(使用SwingX JXPanel只是为了轻松设置背景图片)
int rows = 10;
int columns = 20;
MigLayout layout = new MigLayout(
// set the automatic wrap after columns
"insets 0, wrap " + columns,
// hardcode fixed column width and fixed column gap
"[50lp, fill]5lp",
// hardcode fixed height and a zero row gap
"[20lp, fill]0");
JXPanel content = new JXPanel(layout);
content.setBackgroundPainter(new ImagePainter(XTestUtils.loadDefaultImage("moon.jpg")));
for (int r = 0; r < rows; r++) {
// top gap on even rows
String topGap = r != 0 && r % 2 == 0 ? "gaptop 5lp" : "";
for (int i = 0; i < columns; i++) {
JTextField field = new JTextField();
content.add(field, topGap);
}
}
showInFrame(content, "grid");
Run Code Online (Sandbox Code Playgroud)
刚看到你的最后一句话:
最后,我将从JPanel中的同一行对所有JTextField进行分组,并将JPanel添加到布局中,
考虑不这样做:嵌套面板对于功能不足的布局管理器来说是一个很大的问题,MigLayout是针对一体化(或至少更大部分)的方法而设计的.
抱歉许多不做事 :-)
| 归档时间: |
|
| 查看次数: |
6221 次 |
| 最近记录: |