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