如何使用 MigLayout 以便在 pack()
之后我可以看到一个具有适当大小的 JFrame
来容纳其所有子组件,包括边框、插图和间隙??现在我看到一些元素被切断,留下一半尺寸可见,但一半被切断。
最佳答案
我刚刚弄清楚如何根据所有包含的组件的大小总和来保证容器的正确大小,而不需要对任何内容进行硬编码。
创建一个
JPanel 面板
作为您的工作面板,而不是触摸contentPane
。只需将其添加回contentPane
即可。 不要触摸contentPane
,它是关键。设置
panel
的布局,而无需硬编码行高、列宽等。这可能会破坏布局,因为您的硬编码高度可能会小于或大于需要的高度,留下一些行尺寸错误,并将最后一行/列保留一半。将您的元素添加到
面板
中。添加它们时,您可以指定尺寸。将
panel
添加回contentPane
:getContentPane().add(panel);
我们不需要设置contentPane
的布局。最后,
pack()
、setVisible(true)
如你所愿。无需setSize()
、setBounds()
等。插入和间隙将由MigLayout自动处理。Viola!
SSCCE:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class InsetsAndBorder extends JFrame {
public InsetsAndBorder() {
begin();
}
private void begin() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new MigLayout("insets 2 2 2 2, fillx, debug", "3[]3[]3[]3", "5[]5[]5[]5"));
JLabel label1 = new JLabel("1");
JLabel label2 = new JLabel("2");
JButton button = new JButton("No way!");
panel.add(label1, "cell 1 2, grow");
panel.add(label2, "cell 2 2, grow");
panel.add(button, "cell 0 1, grow");
getContentPane().add(panel);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
InsetsAndBorder frame = new InsetsAndBorder();
}
});
}
}
关于java - [Miglayout]调整容器的大小以适合所包含的所有组件的总大小,带有插图和间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279034/