Java 在Swing中为Tablelayout中的单元格设置边距/插图

Java 在Swing中为Tablelayout中的单元格设置边距/插图,java,swing,layout-manager,tablelayout,Java,Swing,Layout Manager,Tablelayout,在TableLayout(对于swing应用程序)中是否有设置单元格边距的方法,如gridbagloayout中的Insets 我需要这个来填补表格中单元格之间的空白。一种解决方案是添加需要空间的行或列 如果该解决方案适用于netbeans,我会更高兴。实际上有两个TableLayout管理器。“TableLayout和最近的TableLayout 我提供了一个使用这两个管理器的简单示例。我们在窗户上挂了六个钮扣 并在它们之间添加一些空间 清晰思路的解决方案 package com.zetcod

TableLayout
(对于swing应用程序)中是否有设置单元格边距的方法,如
gridbagloayout
中的
Insets

我需要这个来填补表格中单元格之间的空白。一种解决方案是添加需要空间的行或列


如果该解决方案适用于netbeans,我会更高兴。

实际上有两个
TableLayout
管理器。“
TableLayout
和最近的
TableLayout

我提供了一个使用这两个管理器的简单示例。我们在窗户上挂了六个钮扣 并在它们之间添加一些空间

清晰思路的解决方案

package com.zetcode;

import info.clearthought.layout.TableLayout;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TableLayoutGaps2 extends JFrame {

    public TableLayoutGaps2() {

        initUI();

        setTitle("Gaps");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }


   private void initUI() {

        JPanel base = new JPanel();
        base.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5)
        );

        double cols[] = {
            TableLayout.PREFERRED,
            TableLayout.PREFERRED,
            TableLayout.PREFERRED
        };

        double rows[] = {
            TableLayout.PREFERRED,
            TableLayout.PREFERRED
        };

        TableLayout layout = new TableLayout(cols, rows);
        layout.setHGap(5);
        layout.setVGap(5);

        base.setLayout(layout);

        base.add(new JButton("Button"), "0, 0");
        base.add(new JButton("Button"), "1, 0");
        base.add(new JButton("Button"), "2, 0");
        base.add(new JButton("Button"), "0, 1");
        base.add(new JButton("Button"), "1, 1");
        base.add(new JButton("Button"), "2, 1");

        add(base);

        pack();
    }

    public static void main(String[] args) {

      EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                TableLayoutGaps2 ex = new TableLayoutGaps2();
                ex.setVisible(true);
            }
        });
    }
}
package com.zetcode;

import com.esotericsoftware.tablelayout.swing.Table;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;


public class TableLayoutGaps3 extends JFrame {

    public TableLayoutGaps3() {

        initUI();

        setTitle("Gaps");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }


   private void initUI() {

        Table table = new Table();
        getContentPane().add(table);

        table.addCell(new JButton("Button")).pad(5, 5, 2.5f, 2.5f);
        table.addCell(new JButton("Button")).pad(5, 2.5f, 2.5f, 2.5f);
        table.addCell(new JButton("Button")).pad(5, 2.5f, 2.5f, 5);
        table.row();
        table.addCell(new JButton("Button")).pad(2.5f, 5, 5, 2.5f);
        table.addCell(new JButton("Button")).pad(2.5f, 2.5f, 5, 2.5f);
        table.addCell(new JButton("Button")).pad(2.5f, 2.5f, 5, 5);

        pack();
    }

    public static void main(String[] args) {

      EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                TableLayoutGaps3 ex = new TableLayoutGaps3();
                ex.setVisible(true);
            }
        });
    }
}
使用以下方法添加间隙:

layout.setHGap(5);
layout.setVGap(5);

深奥软件的解决方案

package com.zetcode;

import info.clearthought.layout.TableLayout;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TableLayoutGaps2 extends JFrame {

    public TableLayoutGaps2() {

        initUI();

        setTitle("Gaps");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }


   private void initUI() {

        JPanel base = new JPanel();
        base.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5)
        );

        double cols[] = {
            TableLayout.PREFERRED,
            TableLayout.PREFERRED,
            TableLayout.PREFERRED
        };

        double rows[] = {
            TableLayout.PREFERRED,
            TableLayout.PREFERRED
        };

        TableLayout layout = new TableLayout(cols, rows);
        layout.setHGap(5);
        layout.setVGap(5);

        base.setLayout(layout);

        base.add(new JButton("Button"), "0, 0");
        base.add(new JButton("Button"), "1, 0");
        base.add(new JButton("Button"), "2, 0");
        base.add(new JButton("Button"), "0, 1");
        base.add(new JButton("Button"), "1, 1");
        base.add(new JButton("Button"), "2, 1");

        add(base);

        pack();
    }

    public static void main(String[] args) {

      EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                TableLayoutGaps2 ex = new TableLayoutGaps2();
                ex.setVisible(true);
            }
        });
    }
}
package com.zetcode;

import com.esotericsoftware.tablelayout.swing.Table;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;


public class TableLayoutGaps3 extends JFrame {

    public TableLayoutGaps3() {

        initUI();

        setTitle("Gaps");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }


   private void initUI() {

        Table table = new Table();
        getContentPane().add(table);

        table.addCell(new JButton("Button")).pad(5, 5, 2.5f, 2.5f);
        table.addCell(new JButton("Button")).pad(5, 2.5f, 2.5f, 2.5f);
        table.addCell(new JButton("Button")).pad(5, 2.5f, 2.5f, 5);
        table.row();
        table.addCell(new JButton("Button")).pad(2.5f, 5, 5, 2.5f);
        table.addCell(new JButton("Button")).pad(2.5f, 2.5f, 5, 2.5f);
        table.addCell(new JButton("Button")).pad(2.5f, 2.5f, 5, 5);

        pack();
    }

    public static void main(String[] args) {

      EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                TableLayoutGaps3 ex = new TableLayoutGaps3();
                ex.setVisible(true);
            }
        });
    }
}
使用
gap()
方法添加组件之间的间隙

但是,我不能推荐这两个布局管理器中的任何一个。改用 下列布局管理器之一:

  • 混合布局
  • 组布局
  • 表单布局
  • 它们更加灵活和强大。这些管理者能更好地应对这些问题
    布局管理的许多挑战。

    您是否考虑过使用
    EmptyBorder
    ?谢谢。这适用于jlabels:)或没有边框的组件,但按钮等组件不起作用,附加问题:您是否建议以这种方式使用tablelayout而不是gridbaglayout?我不知道您想要实现什么,因此很难提供建议,如果您缺少一项功能,那么可能这不是适合这种情况的解决方案。您可以将
    JButton
    (或其他组件)添加到透明
    JPanel
    s或使用
    CompoundBorder
    instead@MadProgrammer有趣的一点是,建议对MigLayout、TableLayout(或/与标准GridBagLayout/SpringLayout相同)使用EmptyBorders,“但按钮等组件不起作用”将它们添加到
    JPanel
    EmtpyBorder
    面板,然后再将其添加到外部布局。