我正在尝试创建面板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。
问题是,我怎样才能让这个更优雅,不会减慢程序的速度而不会让面板失色?
非常感谢任何见解。
答案 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
并返回true
到scrollableTracksViewportWidth()
。这将强制相等的宽度。