如何限制窗体或面板边框内的组件的动态添加

时间:2011-06-24 21:51:38

标签: java swing size panel border

我试图从数据库中一个接一个地动态地向jpanel添加组件,但是它们水平地超出了表单的限制(甚至是屏幕)。我正在使用BoxLayout的面板,它将内部组件定位在x轴上。我想要做的是限制在窗体边界(或容器面板边框)的x轴上添加组件。 我到目前为止尝试的是:

  • 设置最大尺寸(宽度) 容器jpanel,但没有 工作
  • 将布局管理器设置为 flowlayout,但它也扩大了 无限地在x轴上。
  • 将容器面板放置在一个 滚动窗格。这是一个巨大的问题 水平滚动条,意思是 它不限制组件 形式的边界。

我应该制作自定义布局吗?任何比这简单的想法? 我的代码如下:

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS));
db = Database.getInstance();
List<Category> cats = db.getCategories();
for(Category c : cats){
            JPanel jp = new JPanel();
            //addition of other components to the newly created panel here
            jpanelCases.add(jp);
}

3 个答案:

答案 0 :(得分:0)

尝试放入2个胶水,最后一个胶水:

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS));

jpanelCases.add(Box.createHorizontalGlue());

db = Database.getInstance();
List<Category> cats = db.getCategories();
for(Category c : cats){
            JPanel jp = new JPanel();
            //addition of other components to the newly created panel here
            jpanelCases.add(jp);
}

jpanelCases.add(Box.createHorizontalGlue());

答案 1 :(得分:0)

如何在JPanel上使用JScrollPane?这将包含面板内的元素,而不会超出其物理边界。否则,如果您不喜欢滚动的想法,我建议您以某种方式跟踪添加到面板的元素宽度与面板物理宽度的总和,并在下一个元素宽度添加到总和时停止添加元素超出面板宽度。

我希望这有帮助!

答案 2 :(得分:0)

  

然而,它们水平延伸超出了表格的限制(甚至是屏幕)。

那么在这种情况下你想做什么:

a)忽略组件而不将它们添加到框架中 b)在新行上显示组件

如果答案是“b”,请尝试WrapLayout