繁体   English   中英

动态创建jpanels swing / java列表

[英]Dynamically create list of jpanels swing/java

我正在尝试创建面板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的数量低至8,SamplePluginPanels的颜色也不同(请参见下图)。

问题是,我怎样才能使它更美观,不减慢程序运行速度,不给面板涂错颜色?

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

在此处输入图片说明

我认为答案是竖Box (实际上,两列都是2):

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

/* put them together */

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM