Java GridBagLayout,在JButton之间添加空间

Java GridBagLayout,在JButton之间添加空间,java,swing,jbutton,layout-manager,gridbaglayout,Java,Swing,Jbutton,Layout Manager,Gridbaglayout,我尝试在我的按钮之间增加一些空间是徒劳的,我尝试了很多技巧,比如清空顺序,或者胶水,但是我没有成功。 此外,我无法解释“下一个”和“上一个”上的白色边框,因此无法删除它 这就是我所拥有的: 下面是一个可运行的代码段: package gridspace; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; impo

我尝试在我的按钮之间增加一些空间是徒劳的,我尝试了很多技巧,比如清空顺序,或者胶水,但是我没有成功。 此外,我无法解释“下一个”和“上一个”上的白色边框,因此无法删除它

这就是我所拥有的:

下面是一个可运行的代码段:

package gridspace;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridSpace extends JPanel {

   public static void main(String[] args) {
      GridSpace test = new GridSpace();
   }

   public GridSpace() {
      JFrame frame = new JFrame();
      frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setResizable(false);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
      frame.setLayout(new BorderLayout());
      JPanel firstPanel = new JPanel();
      JPanel buttonPanel = new JPanel(new GridLayout(5, 4));
      JPanel buttonPanelOption = new JPanel();
      firstPanel.setBackground(Color.RED);
      firstPanel.setLayout(new GridBagLayout());

      JButton button[] = new JButton[20];
      JButton buttonNext = new JButton("Next");
      JButton buttonPrevious = new JButton("Previous");

      GridBagConstraints c = new GridBagConstraints();
      Insets insets = new Insets(10, 10, 10, 10);
      c.insets = insets;
      c.weightx = 1;
      c.gridwidth = 30;

      buttonNext.setPreferredSize(new Dimension(100, 20));
      buttonPrevious.setPreferredSize(new Dimension(100, 20));
      for (int i = 0; i < 20; i++) {
         button[i] = new JButton(Integer.toString(i + 1));
         buttonPanel.add(button[i]);
      }
      c.gridx = 3;
      c.gridy = 0;

      firstPanel.add(buttonPanel, c);

      buttonPanelOption.add(buttonPrevious);
      buttonPanelOption.add(buttonNext);

      c.gridx = 3;
      c.gridy = 1;

      firstPanel.add(buttonPanelOption, c);
      frame.getContentPane().add(firstPanel);
      frame.pack();

   }
}
packagegridspace;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.GridLayout;
导入java.awt.Insets;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类GridSpace扩展了JPanel{
公共静态void main(字符串[]args){
GridSpace测试=新的GridSpace();
}
公共网格空间(){
JFrame=新JFrame();
frame=新的JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
frame.setLayout(新的BorderLayout());
JPanel firstPanel=新的JPanel();
JPanel buttonPanel=新的JPanel(新的网格布局(5,4));
JPanel buttonPanelOption=新的JPanel();
第一个面板。背景(颜色。红色);
setLayout(新的GridBagLayout());
JButton按钮[]=新JButton[20];
JButton buttonNext=新JButton(“下一步”);
JButton buttonPrevious=新JButton(“先前”);
GridBagConstraints c=新的GridBagConstraints();
插图插图=新插图(10,10,10,10);
c、 插图=插图;
c、 权重x=1;
c、 网格宽度=30;
buttonNext.setPreferredSize(新尺寸(100,20));
按钮上一个。设置首选尺寸(新尺寸(100,20));
对于(int i=0;i<20;i++){
按钮[i]=新的JButton(Integer.toString(i+1));
按钮面板。添加(按钮[i]);
}
c、 gridx=3;
c、 gridy=0;
第一个面板。添加(按钮面板,c);
buttonPanelOption.add(buttonPrevious);
添加(buttonNext);
c、 gridx=3;
c、 gridy=1;
第一个面板。添加(按钮布局,c);
frame.getContentPane().add(firstPanel);
frame.pack();
}
}

这与GridBagLayout无关。而是改进GridLayout构造函数调用。更改:

JPanel buttonPanel = new JPanel(new GridLayout(5, 4));

关于:

此外,我无法解释“下一个”和“上一个”上的白色边框,因此无法删除它

这是因为持有它的JPanel是不透明的。将其设置为非不透明,主容器的背景色将显示出来

例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.*;

public class Test3 extends JPanel {
   private static final int BTN_COUNT = 20;
   private static final int GAP = 5;
   private static final Color BG = Color.RED;

   public Test3() {
      JPanel btnPanel = new JPanel(new GridLayout(0, 4, GAP, GAP));
      for (int i = 0; i < BTN_COUNT; i++) {
         btnPanel.add(new JButton(String.valueOf(i + 1)));
      }
      btnPanel.setOpaque(false);

      JPanel southPanel = new JPanel(new GridLayout(1, 0, GAP, 0));
      southPanel.add(new JButton("Previous"));
      southPanel.add(new JButton("Next"));
      southPanel.setOpaque(false);

      setBackground(BG);
      setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
      setLayout(new BorderLayout(GAP, GAP));
      add(btnPanel, BorderLayout.CENTER);
      add(southPanel, BorderLayout.PAGE_END);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("Test3");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new Test3());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.GridLayout;
导入javax.swing.*;
公共类Test3扩展了JPanel{
专用静态最终int BTN_计数=20;
专用静态最终内部间隙=5;
专用静态最终颜色BG=Color.RED;
公共测试3(){
JPanel btnPanel=新JPanel(新网格布局(0,4,间隙,间隙));
对于(int i=0;i
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.*;

public class Test3 extends JPanel {
   private static final int BTN_COUNT = 20;
   private static final int GAP = 5;
   private static final Color BG = Color.RED;

   public Test3() {
      JPanel btnPanel = new JPanel(new GridLayout(0, 4, GAP, GAP));
      for (int i = 0; i < BTN_COUNT; i++) {
         btnPanel.add(new JButton(String.valueOf(i + 1)));
      }
      btnPanel.setOpaque(false);

      JPanel southPanel = new JPanel(new GridLayout(1, 0, GAP, 0));
      southPanel.add(new JButton("Previous"));
      southPanel.add(new JButton("Next"));
      southPanel.setOpaque(false);

      setBackground(BG);
      setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
      setLayout(new BorderLayout(GAP, GAP));
      add(btnPanel, BorderLayout.CENTER);
      add(southPanel, BorderLayout.PAGE_END);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("Test3");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new Test3());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}