1

プログラムのアカウント名を表示する必要があり、JScrollPane 内で JTree を使用して表示したいと考えています。

これが私のコードです:

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 はそのためにはかなり簡単だと思います。

4

1 に答える 1

3
accountsPane = new JScrollPane(accounts);

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

これは必要ないだけでなく、事実上、アカウント JTree を複数のコンテナー (JScrollPane のビューポート (良い) と JScrollPane 自体 (悪い)) に追加するため、混乱を招きます。そうしないでください。setViewportView(...)上記の最初の行に示されているように JScrollPane のコンストラクターを使用するか、作成後に JScrollPane オブジェクトを呼び出すことによってのみ、JScrollPane のビューポートに追加します。

編集:別の問題は、の使用ですsetBounds(...)。これを行うべきではなく、コンポーネントを適切に表示できるようにレイアウト マネージャーを使用する必要があります。また、JScrollPane を受け入れるコンテナーでrevalidate()andを呼び出す必要があります。repaint()

于 2013-04-14T23:26:43.453 に答える