如何在JButtons之间创建间距?

3

我正在尝试为一个简单的调度程序创建一个小型主菜单,但是我发现按钮之间没有空隙。它们紧贴在一起,我想让每个按钮之间有一些间隔。

我已经尝试使用weightx、weighty命令,但似乎没有任何变化。 我想要在GUI边缘和按钮边缘之间以及每个按钮之间留出一些空白空间。

这里是一个截图

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Scheduler {

JButton VDay, VWeek, Task, Exit;
JFrame wframe, dframe, tframe;

JLabel head;




public void CreateFrame() {
    JFrame frame = new JFrame("Main Menu");     

    ButtonListener btnlst = new ButtonListener();
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    c.weightx = 1;
    c.weighty = .25;
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 1;
    c.gridheight = 1;
    c.fill = GridBagConstraints.BOTH;
    head = new JLabel("The Plain Scheduler");
    panel.add(head, c);
    c.weightx = 1;
    c.weighty = .25;
    c.gridx = 0;
    c.gridy = 1;
    c.gridheight = 2;
    c.gridwidth = 3;
    VDay = new JButton("View Day");
    panel.add(VDay, c);
    c.weightx = 1;
    c.weighty = .25;
    c.gridx = 0;
    c.gridy = 3;
    c.gridheight = 2;
    c.gridwidth = 3;
    VWeek = new JButton("View Week");
    panel.add(VWeek,c);
    c.weightx = 1;
    c.weighty = .25;
    c.gridx = 0;
    c.gridy = 5;
    c.gridheight = 2;
    c.gridwidth = 3;
    Task = new JButton("Assign/Edit Tasks");
    panel.add(Task, c);
    c.weightx = 1;
    c.weighty = .25;
    c.gridx = 0;
    c.gridy = 7;
    c.gridheight = 1;
    c.gridwidth = 2;
    Exit = new JButton("Exit");
    panel.add(Exit, c);

    VDay.addActionListener(btnlst);
    VWeek.addActionListener(btnlst);
    Task.addActionListener(btnlst);
    Exit.addActionListener(btnlst);

    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
    Scheduler scheduler = new Scheduler();
    scheduler.CreateFrame();
    }
}

2
尝试使用 GridBagConstraints#insets - MadProgrammer
我在按钮之间留出一些空间方面遇到了一些困难。再次查看教程,注意第四个按钮和第五个按钮之间的空间。我想在边缘之间留出一些空白 - 这可能通过在面板上使用“边框”来更好地实现。教程中有一个关于“如何使用边框”的部分。 - camickr
@MadProgrammer 对不起,您能否给出一个示例代码,以便我更好地理解吗?我尝试了“c.insets = 2;”,但是出现了一个错误,提示“错误:不兼容的类型:int无法转换为Insets”。 - David L
1
我尝试了 "c.insets = 2;" - 这是教程所做的吗? - camickr
请参考JavaDocs - MadProgrammer
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3
你可以使用GridBagConstraints#insets来定义添加到单元格的间距/填充量,例如... Buttons
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Scheduler {

    JButton VDay, VWeek, Task, Exit;
    JFrame wframe, dframe, tframe;

    JLabel head;

    public void CreateFrame() {
        JFrame frame = new JFrame("Main Menu");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        c.weightx = 1;
        c.weighty = .25;
        c.insets = new Insets(5, 0, 5, 0);
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.fill = GridBagConstraints.BOTH;
        head = new JLabel("The Plain Scheduler");
        panel.add(head, c);
        VDay = new JButton("View Day");
        panel.add(VDay, c);
        VWeek = new JButton("View Week");
        panel.add(VWeek, c);
        Task = new JButton("Assign/Edit Tasks");
        panel.add(Task, c);
        Exit = new JButton("Exit");
        panel.add(Exit, c);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                Scheduler scheduler = new Scheduler();
                scheduler.CreateFrame();
            }
        });
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,