java swing jScrollpane删除多余的空间

java swing jScrollpane删除多余的空间,java,swing,jscrollpane,Java,Swing,Jscrollpane,我今天正在与JScrollPane合作,这就是我迄今为止所做的 package it.polimi.ingsw.ps11.view.graphicView; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.Acti

我今天正在与JScrollPane合作,这就是我迄今为止所做的

package it.polimi.ingsw.ps11.view.graphicView;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class TestIt2 extends JPanel {
   private static final Dimension BUTTON_SIZE = new Dimension(170, 150);
   private Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
   private JPanel buttonPanel = new JPanel();

   public TestIt2() {
       buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
      JPanel holderPanel = new JPanel(new BorderLayout());
      holderPanel.add(buttonPanel, BorderLayout.NORTH);
      holderPanel.add(Box.createGlue(), BorderLayout.CENTER);

      setLayout(new BorderLayout());
      add(new JScrollPane(holderPanel,
              JScrollPane.VERTICAL_SCROLLBAR_NEVER,
              JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS), BorderLayout.CENTER);
      createButton();
   }

   public class addButton implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        createButton();     
    }
   }

   protected void createButton() {
      JButton button = new JButton("click me");
      button.addActionListener(new addButton());
      button.setPreferredSize(BUTTON_SIZE);
      buttonPanel.add(button);
      revalidate();
      repaint();
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(screen.width / 10 * 2,
            screen.height / 10 * 2);
   }

   private static void createAndShowGui() {
      TestIt2 mainPanel = new TestIt2();

      JFrame frame = new JFrame("TestIt2");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}`
问题是滚动窗格在我创建的按钮右侧增加了很多空间,尽管还有空间。
我如何修改我的代码,使它没有那么多的可用空间,但我的最后一个按钮就在滚动窗格的边框上,而每个新按钮都只占用它需要的空间?谢谢大家

按钮。设置最大尺寸(按钮大小)使用
流程布局
而不是方框布局。FlowLayout将考虑组件的首选尺寸。BoxLayout将考虑最大尺寸,因此具有不同的首选/最大尺寸会导致奇怪的布局。
button.setMaximumSize(按钮大小)使用
流程布局
而不是方框布局。FlowLayout将考虑组件的首选尺寸。BoxLayout将考虑最大尺寸,因此使用不同的首选/最大尺寸会导致奇怪的布局。