Java 如何在布局中扩大差距
我想创建一个带有底部状态行的项目垂直列表,这样当它被调整大小时,项目和底部行之间的空间就会增大。使用它一定很简单,但不知何故它不是 下面的代码正是我想要的,但我必须使用一个组件来完成间距:Java 如何在布局中扩大差距,java,swing,layout,layout-manager,miglayout,Java,Swing,Layout,Layout Manager,Miglayout,我想创建一个带有底部状态行的项目垂直列表,这样当它被调整大小时,项目和底部行之间的空间就会增大。使用它一定很简单,但不知何故它不是 下面的代码正是我想要的,但我必须使用一个组件来完成间距: final JFrame frame = new JFrame(); final JPanel panel = new JPanel(new MigLayout("wrap, debug", "[grow, fill]", "")); for (int i=0; i<5; ++i) { fina
final JFrame frame = new JFrame();
final JPanel panel = new JPanel(new MigLayout("wrap, debug", "[grow, fill]", ""));
for (int i=0; i<5; ++i) {
final JEditorPane line = new JEditorPane();
line.setText("a" + i);
panel.add(line);
}
panel.add(new JLabel(), "push"); // This should be a gap!
final JLabel status = new JLabel("status line");
panel.add(status, "");
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
final JFrame=new JFrame();
最终的JPanel面板=新的JPanel(新的MigLayout(“包装,调试”,“增长,填充],”);
对于(int i=0;i如果在组件上添加推送,则其符号与以下符号不同:
使组件所在的行和/或列以“权重”增长。这可以用来代替列/行约束中的“增长”关键字
因此,您必须添加push关键字作为行约束。miglaway
确实是一个非常强大的管理器。这是可以实现的
我提供了三种解决方案
解决方案1
我们在第5行和第6行之间留出了一个贪婪的间隙
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow extends JFrame {
public MigLayoutGapGrow() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap", "[grow, fill]", "[][][][][]20:push[]"));
add(new JTextField("a"+1));
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow ex = new MigLayoutGapGrow();
ex.setVisible(true);
}
});
}
}
解决方案2
我们放大放置标签的最后一个单元格,然后
与底部对齐
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow2 extends JFrame {
public MigLayoutGapGrow2() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap, debug", "[grow, fill]"));
add(new JTextField("a"+1));
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status, "pushy, bottom");
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow2 ex = new MigLayoutGapGrow2();
ex.setVisible(true);
}
});
}
}
解决方案3
使用相对定位将标签贴在底部。相对
定位似乎不适用于pack()
方法,这可能会导致
这可能是个问题
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow3 extends JFrame {
public MigLayoutGapGrow3() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap", "[grow, fill]"));
add(new JTextField("a"+1), "id a1");
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status, "pos a1.x visual.y2-p");
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow3 ex = new MigLayoutGapGrow3();
ex.setVisible(true);
}
});
}
}