2013-04-07 250 views
0

我正在嘗試創建面板PluginListPanel(擴展JPanel),它將顯示插件面板列表,它將尊重插件面板的首選高度,但會強制寬度。我有一個解決方案,但它很慢,並有一個奇怪的錯誤。在截圖中,有兩個這樣的面板,一個向左,一個向右:動態創建jpanels swing列表/ java

enter image description here

我不知道不同佈局的管理系統非常好,但我知道,在頂部場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; 
    } 
} 

我遇到的問題是,當我滾動,系統有點反應遲鈍,和SamplePluginPanels的顏色是不同的(見下圖),即使SamplePluginPanels的數量低至8.

問題是,我該如何讓這更優雅,而不是減慢程序速度,避免顏色錯誤?

任何見解都非常感謝。

enter image description here

回答

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()。這將迫使相等的寬度。

+0

這個解決方案比我的更好:-)不幸的是,它遇到了同樣的問題,因爲當我滾動時緩慢和顏色變化:-( – tor 2013-04-07 22:52:39

+0

@tor這可能是'PanelContainer'或'PluginOnePanel'中的缺陷 – Mordechai 2013-04-07 22:55:43

+0

兩者都是JPanel的虛擬擴展 - PluginOnePanel只是簡單地將一個PanelContainer中包含的面板顯示在一個框架中,它現在只是一個帶有JLabel和設置背景顏色的JPanel。除此之外什麼也沒有... – tor 2013-04-07 23:26:05