JPanel使用BoxLayout和ScrollPane作为其Parent

时间:2013-06-07 23:35:39

标签: java swing layout-manager boxlayout

我有一个JScrollPane(两个滚动条都是可选的(不应该导致问题) ScrollPane内部是一个包含BoxLayout和X_Axis的面板 - 对齐。 (它包含任意数量的具有固定(prefference)大小的面板。 问题是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));

我不知道这个问题是什么,并没有找到任何解决方案......

编辑:sry花了一些时间。原始代码是复杂的,以提取一些sscce ..我写了一个测试类。这个例子工作coorect ..但我不知道什么不同..包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);
}
}

1 个答案:

答案 0 :(得分:2)

//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的面板 - 对齐。 (它包含任意数量的具有固定(prefference)大小的面板。

什么是固定尺寸?

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

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