动态创建jpanels swing / java列表

时间:2013-04-07 22:15:03

标签: java swing layout user-interface jscrollpane

我正在尝试创建面板PluginListPanel(扩展JPanel),它将显示一个插件面板列表,它将尊重插件面板的首选高度,但会强制宽度。我有一个解决方案,但它很慢,有一个奇怪的错误。在屏幕截图中,有两个这样的面板,一个在左边,一个在右边:

enter image description here

我不太了解不同的布局管理器系统,但我知道BorderLayout中的TOP字段可以满足我的需求。所以,我想出了这个“递归”解决方案:

public PluginListPanel(List<PanelContainer> items) {        
    JPanel body = this;
    for (PanelContainer item : items) {
        body.setLayout(new BorderLayout(0, 0));
        JPanel panel = new PluginOnePanel(item);
        body.add(panel, BorderLayout.NORTH);

        JPanel newBody = new JPanel();
        body.add(newBody, BorderLayout.CENTER);
        body = newBody;
    }
}

我遇到的问题是当我滚动时,系统响应有点慢,并且SamplePluginPanels的颜色不同(见下图),即使SamplePluginPanels的数量低至8。

问题是,我怎样才能让这个更优雅,不会减慢程序的速度而不会让面板失色?

非常感谢任何见解。

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为垂直Box是答案(实际上是2,在两列上):

Box leftBox = Box.createVerticalBox();
Box rightBox = Box.createVerticalBox();

/* put them together */

setLayout(new GridLayout(2,1));
add(leftBox);
add(rightBox);

还要确保滚动窗格的内容实现Scrollable并返回truescrollableTracksViewportWidth()。这将强制相等的宽度。