Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态创建jpanels swing/java的列表_Java_Swing_Layout_User Interface_Jscrollpane - Fatal编程技术网

动态创建jpanels swing/java的列表

动态创建jpanels swing/java的列表,java,swing,layout,user-interface,jscrollpane,Java,Swing,Layout,User Interface,Jscrollpane,我正在尝试创建一个面板,PluginListPanel(扩展JPanel),它将显示一个插件面板列表,该列表将尊重插件面板的首选高度,但将强制宽度。我有一个解决方案,但速度很慢,有一个奇怪的bug。在屏幕截图中,有两个这样的面板,一个在左侧,一个在右侧: 我不太了解不同的布局管理器系统,但我知道BorderLayout中的顶部字段符合我的要求。因此,我提出了这个“递归”解决方案: public PluginListPanel(List<PanelContainer> items)

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

我不太了解不同的布局管理器系统,但我知道BorderLayout中的顶部字段符合我的要求。因此,我提出了这个“递归”解决方案:

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;
    }
}
公共插件列表面板(列表项){
JPanel body=这个;
用于(面板容器项目:项目){
body.setLayout(新的BorderLayout(0,0));
JPanel面板=新的PluginOnePanel(项目);
主体。添加(面板,边框布局。北);
JPanel newBody=新的JPanel();
body.add(newBody,BorderLayout.CENTER);
身体=新手;
}
}
我遇到的问题是,当我滚动时,系统响应有点慢,并且SamplePluginPanel的颜色不同(参见下图),即使SamplePluginPanel的数量低至8

问题是,我如何才能使它更优雅,而不是减慢程序,而不是错误的面板颜色

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


我认为一个垂直的
框是答案(实际上是2,在两列上):


另外,请确保滚动窗格的内容实现了
Scrollable
,并将
true
返回到
scrollableTracksViewportWidth()
。这将迫使宽度相等。

此解决方案比我的更好:-)不幸的是,它遇到了与我滚动时速度慢和颜色变化相同的问题:-(@tor这可能是
PanelContainer
PluginOnePanel
中的一个缺陷。这两个都是JPanel的虚拟扩展-PluginOnePanel只是在一个框架内显示PanelContainer中包含的面板,而到目前为止,它只是一个带有JLabel和设置的背景颜色的JPanel。除了…I figu之外,没有其他内容我使用的背景色是SystemColor.textHighlight-如果我使用另一种颜色,问题就会消失:D
Box leftBox = Box.createVerticalBox();
Box rightBox = Box.createVerticalBox();

/* put them together */

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