Java 以BoxLayout和ScrollPane作为其父级的JPanel

Java 以BoxLayout和ScrollPane作为其父级的JPanel,java,swing,layout-manager,boxlayout,Java,Swing,Layout Manager,Boxlayout,我有一个JScrollPane(两个滚动条都是可选的(应该不会导致问题) 滚动窗格的内部是一个具有BoxLayout和X_轴对齐的面板(它包含任意数量的固定(预引用)大小的面板)。 问题是滚动窗格将比需要的宽得多(水平滚动条在“灰色屏幕”中滚动)。 与Y_轴对齐时,它可以正常工作。 相关代码: final JPanel forSpecific = new JPanel(); final JScrollPane scrollSpecific = new JScrollPane(forSp

我有一个JScrollPane(两个滚动条都是可选的(应该不会导致问题) 滚动窗格的内部是一个具有BoxLayout和X_轴对齐的面板(它包含任意数量的固定(预引用)大小的面板)。 问题是滚动窗格将比需要的宽得多(水平滚动条在“灰色屏幕”中滚动)。 与Y_轴对齐时,它可以正常工作。 相关代码:

final JPanel forSpecific = new JPanel();

    final JScrollPane scrollSpecific = new JScrollPane(forSpecific,
            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        forSpecific.setLayout(new BoxLayout(forSpecific,BoxLayout.X_AXIS));
我不知道问题出在哪里,也没有找到任何解决办法

编辑:sry这花了一些时间。原始代码太复杂,无法提取一些sscce。我编写了一个测试类。这个例子很好用。但我不知道有什么不同。打包getdata

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class Sscce {

public static void gui(){
    final JFrame rootframe = new JFrame("Time Series Mining");
    final JPanel mainPanel = new JPanel(new BorderLayout());
    rootframe.setSize(new Dimension(400,400));
    rootframe.setContentPane(mainPanel);
    mainPanel.setLayout(new BorderLayout());
    JPanel center=new JPanel(new GridLayout(2,1));
    JPanel forSpecific=new JPanel();
    forSpecific.setLayout(new BoxLayout(forSpecific, BoxLayout.X_AXIS));
    JPanel test1 = new JPanel();
    test1.setPreferredSize(new Dimension(1000,1000));
    forSpecific.add(test1);
    test1.setBackground(Color.white);
    final JScrollPane scrollSpecific = new JScrollPane(forSpecific);
    center.add(scrollSpecific);
    rootframe.add(center, BorderLayout.CENTER);
    rootframe.setVisible(true);
}
}
这不是问题,但“根据需要滚动条”是默认设置。您不需要指定此选项

滚动窗格的内部是一个具有BoxLayout和X_轴对齐的面板(它包含任意数量的固定(预引用)大小的面板)

什么是固定尺寸

  • “主”面板添加到滚动窗格
  • “子”面板添加到主面板

在任何情况下,大小都不应固定,布局管理器应确定首选大小。或者,如果您正在创建自定义组件,则应覆盖
getPreferredSize()
方法返回正确的大小,以便布局管理器可以完成其工作。

如何定义特定的
?最好包括一个SSCE并添加到其父项(具有GridLayout(2,1)的JPanel)中,作为第二项:centerPanel.add(scrollSpecific);@JanS,意思是没有
SSCCE!
。大多数情况下,当你试图创建SSCCE时,你会发现你的问题。但是..我用“X-directon”修改了BoxLayout到FlowLayout。直到它几乎相同为止。我可以相信这个布局可以查看子组件X布局、Y布局和首选大小吗?我讨厌jawa gui。。。
//final JScrollPane scrollSpecific = new JScrollPane(forSpecific,
//    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
//    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
final JScrollPane scrollSpecific = new JScrollPane(forSpecific);