JPanel与BoxLayout和ScrollPane作为它的父



我有一个JScrollPane(两个滚动条都是可选的(不应该导致问题))ScrollPane的内部是一个带有BoxLayout和X_Axis - align的面板。(它包含任意数量的固定(首选)大小的面板。问题是,ScrollPane将比必要的更宽(水平滚动条滚动通过"灰色屏幕")。与Y_Axis对齐,它工作,因为它应该。相关代码:

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));
我不知道是什么问题,也没有找到任何解决办法。

编辑:对不起,花了一些时间。原来的代码太复杂了,无法提取一些精华。我写了一个测试类。这个例子工作正常。但我不知道有什么不同……包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);
}
}
//final JScrollPane scrollSpecific = new JScrollPane(forSpecific,
//    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
//    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
final JScrollPane scrollSpecific = new JScrollPane(forSpecific);

不是问题,但是"按需滚动条"是默认的。你不需要指定这个

ScrollPane的内部是一个带有BoxLayout和X_Axis - align的面板。(它包含任意数量的固定(首选)大小的面板。

什么是固定尺寸?

  • 添加到滚动面板的"main"面板
  • 添加到主面板的"子"面板
在任何情况下,大小不应该是固定的,布局管理器应该确定首选的大小。或者,如果你正在创建一个自定义组件,那么你应该重写getPreferredSize()方法来返回适当的大小,以便布局管理器可以完成它的工作。

相关内容

  • 没有找到相关文章

最新更新