在Swing GUI中提供空白区域

没有空白区域的GUI显得“拥挤”。如何在不借助明确设置组件的位置或大小的情况下提供空白区域?



大话西游666
浏览 951回答 4
4回答

Helenr

MigLayout有多种创造空间的方式。(在此布局中,空间称为间隙。)可以使用布局约束在最高级别创建间隙,可以在行和列之间创建间隙,也可以在具有组件约束的各个组件之间设置间隙。在名为insets的容器的边界周围也存在特定的间隙,这些容器具有自己的特定关键字。以下示例创建所有这些类型的差距:package com.zetcode;import java.awt.EventQueue;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import net.miginfocom.swing.MigLayout;public class MigLayoutGaps2 extends JFrame {    public MigLayoutGaps2() {        initUI();        setTitle("Gaps");        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setLocationRelativeTo(null);    }    private void initUI() {        JPanel base = new JPanel(new MigLayout("flowy, ins 30, gap 15"));        setContentPane(base);        JPanel pnl1 = new JPanel();        pnl1.setBorder(                BorderFactory.createTitledBorder("Grid gaps")        );        pnl1.setLayout(new MigLayout("gap 5 5, ins 10, wrap 3"));        pnl1.add(new JButton("1"));        pnl1.add(new JButton("2"));        pnl1.add(new JButton("3"));        pnl1.add(new JButton("4"));        pnl1.add(new JButton("5"));        pnl1.add(new JButton("6"));        JPanel pnl2 = new JPanel();        pnl2.setBorder(                BorderFactory.createTitledBorder("Column gaps")        );        pnl2.setLayout(new MigLayout("wrap 3", "[]10[]"));        JLabel lbl1 = new JLabel();        lbl1.setBorder(            BorderFactory.createEtchedBorder()        );        JLabel lbl2 = new JLabel();        lbl2.setBorder(            BorderFactory.createEtchedBorder()        );        JLabel lbl3 = new JLabel();        lbl3.setBorder(            BorderFactory.createEtchedBorder()        );                pnl2.add(lbl1, "w 40, h 110");        pnl2.add(lbl2, "w 40, h 110");        pnl2.add(lbl3, "w 40, h 110");        JPanel pnl3 = new JPanel();        pnl3.setBorder(                BorderFactory.createTitledBorder("Row gaps")        );        pnl3.setLayout(new MigLayout("wrap", "", "[]15[]"));        JLabel lbl4 = new JLabel();        lbl4.setBorder(            BorderFactory.createEtchedBorder()        );        JLabel lbl5 = new JLabel();        lbl5.setBorder(            BorderFactory.createEtchedBorder()        );        JLabel lbl6 = new JLabel();        lbl6.setBorder(            BorderFactory.createEtchedBorder()        );                pnl3.add(lbl4, "w 150, h 20");        pnl3.add(lbl5, "w 150, h 20");        pnl3.add(lbl6, "w 150, h 20");                JPanel pnl4 = new JPanel();        pnl4.setBorder(                BorderFactory.createTitledBorder("Component gaps")        );        pnl4.setLayout(new MigLayout());        pnl4.add(new JLabel("Name:"), "gapright 5");        pnl4.add(new JTextField(10), "gapbottom 20, gaptop 20");        base.add(pnl1);        base.add(pnl2);        base.add(pnl3);        base.add(pnl4);        pack();    }    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            @Override            public void run() {                MigLayoutGaps2 ex = new MigLayoutGaps2();                ex.setVisible(true);            }        });    }}我们在布局中有四个面板。每个小组都有一名MigLayout经理。JPanel base = new JPanel(new MigLayout("flowy, ins 30, gap 15"));此行创建容器插图和面板之间的垂直间隙。pnl1.setLayout(new MigLayout("gap 5 5, ins 10, wrap 3"));在这里,我们为整个网格结构应用间隙,并设置容器间隙。pnl2.setLayout(new MigLayout("wrap 3", "[]10[]"));此行会在列之间创建间隙。pnl3.setLayout(new MigLayout("wrap", "", "[]15[]"));使用此代码定义行间隙。pnl4.add(new JLabel("Name:"), "gapright 5");pnl4.add(new JTextField(10), "gapbottom 20, gaptop 20");最后,可以在各个组件之间创建间隙。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java