2013-04-14 108 views
1

我需要顯示我的程序的帳戶名稱,我想在JScrollPane內使用JTree執行此操作。JTree不顯示JScrollPane內部

這裏是我的代碼:

public void loadAccounts() { 

    accountsRoot = new DefaultMutableTreeNode("Accounts"); //create root 

    accountsRoot.add(new DefaultMutableTreeNode("Fred")); //add one element 
                  //for testing 
    accounts = new JTree(accountsRoot); 

    accountsPane = new JScrollPane(accounts); 

    accountsPane.add(accounts); //don't think this is necessary 
    canvas.add(accountsPane); 
    accounts.setBounds(0, 0, accountsPane.getWidth(), accountsPane.getHeight()); 
    accountsPane.setBounds(460, 270, 240, 410); 
    accounts.setVisible(true); 
    accountsPane.setVisible(true); 

} 

因爲我沒有使用佈局手動設置界限。

我似乎無法得到它顯示。我想最終結束了從在加載帳戶,這樣我的身影JTree的會很容易認爲,

+1

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 'accountsPane.setBounds(460,270,240,410);'這可能是問題的原因。 ***使用佈局管理器*** –

回答

3
accountsPane = new JScrollPane(accounts); 

accountsPane.add(accounts); //don't think this is necessary 

不僅是沒有必要的,但它會搞亂了,因爲這實際上增加了您的帳戶的JTree到多個容器 - 到JScrollPane的視口(好)和JScrollPane本身(壞)。不要這樣做。只有通過JScrollPane的構造函數才能將其添加到JScrollPane的視口,如上面第一行所示,或者在創建JScrollPane對象後調用setViewportView(...)

編輯:另一個問題是您使用setBounds(...)。您不應該這樣做,而應該使用佈局管理器來允許正確查看組件。您還需要在任何接受JScrollPane的容器上調用revalidate()repaint()

+0

即使沒有第二行,我也沒有看到JTree被顯示。我應該看到至少有兩個元素,根和孩子,不是? – Fam

+0

@ F.Ali:見編輯回答。如需更多幫助,請考慮發佈[sscce](http://sscce.org)。 –

+0

是否可以在不使用佈局管理器的環繞組件中爲一個組件使用佈局管理器?重新驗證()和repaint()顯示JTree,但現在JScrollPane懸停在JPanel的中間位置。 – Fam