0

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

在此处输入图像描述

我不太了解不同的布局管理器系统,但我知道 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 个。

问题是,我怎样才能让它更优雅,不减慢程序速度,也不会使面板变色?

任何见解都受到高度赞赏。

在此处输入图像描述

4

1 回答 1

0

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

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

/* put them together */

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

还要确保滚动窗格的内容实现Scrollable并返回true, to scrollableTracksViewportWidth()。这将强制等宽。

于 2013-04-07T22:25:11.063 回答