2013-01-10 70 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