gpt4 book ai didi

java - 如何在 MigLayout 中增加间隙

转载 作者:行者123 更新时间:2023-11-30 11:23:11 25 4
gpt4 key购买 nike

我想创建一个带有底部状态行的垂直项目列表,以便在调整大小时,项目和底部行之间的空间会增加。使用MigLayout这一定是非常微不足道的,但不知何故并非如此。

下面的代码完全符合我的要求,但我不得不使用一个组件来做间距:

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);

我想我可以在第三个构造函数参数中指定不断增长的差距,但列表长度是可变的。这也可以全部解决,但我怀疑这是最佳做法。我所希望的是类似 gaptop push 的东西,但它似乎什么也没做。

我做错了什么?做我想做的有争议吗?

最佳答案

MigLayout 确实是一个非常强大的管理器。这个可以实现以多种方式。我提供三种解决方案。

解决方案一

我们在第 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);
}
});
}
}

方案二

我们放大放置标签的最后一个单元格。然后是标签与底部对齐。

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);
}
});
}
}

方案三

标签使用相对定位附加到底部。相对的定位似乎不适用于 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);
}
});
}
}

Gaps

关于java - 如何在 MigLayout 中增加间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21349451/

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