2013-01-10 134 views
0

我創建了JScrollPane,並且希望在該JScrollPane內顯示不同的JPanel,具體取決於我從用戶處獲得的輸入。出於某種原因,我的JScrollPane保持空白,並且從不描繪Panel中的內容。在JScrollPane中更新JPanel不起作用

private JScrollPane panelView; 

// Creating my ScrollPane with a blank JPanel 
panelView = new JScrollPane(new JPanel()); 
// Scenario1 is my top level JPanel, also contains a JTree 
scenario1.add(panelView, BorderLayout.CENTER); 

我的代碼,當我得到的行動來更新顯示的JPanel。我已經通過調試器確認我正確地執行了此代碼。

// Remove previous displayed JPanel within JScrollPane 
panelView.removeAll(); 
if(node.equals(nodes.loginDefaultUser)) 
    { 
     loginDefaultUserPanel = new LoginDefaultUserPanel();  
     panelView.add(loginDefaultUserPanel); 
    } 
    else if(node.equals(nodes.addUsers)) 
    { 
     addUsersPanel = new AddUsersPanel(); 
     panelView.add(addUsersPanel); 
    } 
    else if(node.equals(nodes.getVersions)) 
    { 
     getVersionsPanel = new GetVersionsPanel(); 
     panelView.add(getVersionsPanel); 
    } 
    panelView.revalidate(); 
    panelView.repaint(); 
+1

刪除'panelView.removeAll()'的How to use Scroll Panes,只是使用'panelView.setViewportView' – Reimeus

回答

2

使用JScrollPane#setViewportView而不是add

您可能會發現使用審查

+0

我給一個鏡頭,但仍然是相同的行爲(抱歉,我的評論格式有問題)。 例如: '如果(node.equals(ndes.loginDefaultUser)) \t \t { \t \t \t loginDefaultUserPanel =新LoginDefaultUserPanel(); \t \t \t panelView.setViewportView(loginDefaultUserPanel); \t \t \t \t \t \t //panelView.add(loginDefaultUserPanel); \t \t}' – Matt

+0

我只能假設你做別的事情不對 – MadProgrammer

+0

啊,只是想通了。一旦我用setViewportView替換了添加,然後也從方法的開頭刪除了我的'panelView.removeAll();',那麼它就起作用了。我不知道爲什麼我不必刪除前面的面板(或者爲什麼它打破了開始),但現在看起來是正確的。 – Matt