Java 面板上的滚动窗格不显示';不允许滚动按钮

Java 面板上的滚动窗格不显示';不允许滚动按钮,java,swing,Java,Swing,我有一个JPanel,它将包含很少或很多按钮,如果有更多的按钮无法显示,我需要能够滚动垂直显示的按钮。添加JScrollPane时,即使按钮明显重叠JPanel的可用空间,也不允许滚动 如何创建滚动窗格: scrollPane = new ScrollPane(this); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.setVerticalScrollBar

我有一个
JPanel
,它将包含很少或很多按钮,如果有更多的按钮无法显示,我需要能够滚动垂直显示的按钮。添加
JScrollPane
时,即使按钮明显重叠
JPanel
的可用空间,也不允许滚动

如何创建滚动窗格:

scrollPane = new ScrollPane(this);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBorder(BorderFactory.createLineBorder(Color.black, 2));
按钮的添加方式:

for (int i = 0; i < 20; ++i)
{
    panel.add(new TestButton("example." + i, "example"));
}
for(int i=0;i<20;++i)
{
添加(新的测试按钮(“示例”+i,“示例”);
}

该面板被添加到另一个使用
FlowLayout
的面板上。如果有必要,按钮是自定义绘制的按钮(它们扩展了
JButton
),可以更改自己的大小(使用
setPreferredSize
)并进行自己的绘制。

Flow layout最初从左到右添加组件。当您禁用水平滚动条时,按钮将变得不可见。我的建议是采用方框布局,将按钮从上到下排列

panel.setLayout(new javax.swing.BoxLayout(panel, javax.swing.BoxLayout.Y_AXIS));

当我使用这种布局时,不管按钮的首选大小和
JPanel
中的可用空间有多大,按钮都会被塞进小盒子中。是否可以发布简化的测试代码?(可能在一个类中,包含JFrame、JScrollPane、JPanel和带有JButtons的循环)。这将帮助我解决这个问题。你有没有对TestButton太小的首选尺寸?如果您使用JButton而不是custom TestButton,是否存在相同的问题?框布局也使用组件的最小和最大尺寸,请将按钮的这些值设置为相同的尺寸,以避免剪切并允许滚动,因为您使用的是custom
JButton
,例如,一个扩展了
JButton
的类,并且您正在覆盖
JButton
的图形及其首选大小,我无法提供答案,因为您没有提供自定义按钮的代码。对于常规的
JButton
s,答案是要走的路。如果有关系,按钮是自定义绘制的按钮(它们扩展JButton),可以更改自己的大小(使用setPreferredSize)并进行自己的绘制。-首先使用标准JDK按钮使代码正常工作。然后,如果这是可行的,但它与您的自定义按钮不起作用,您知道问题是您的自定义按钮。如果JDK按钮不起作用,那么您有一个简单的顶部帖子。你发布的代码没有告诉我们任何事情,我们也猜不出哪里出了问题。