1

Eclipse の Windowbuilder で Window を作成しました。ウィンドウには、コンテンツ パネルと、コンテンツ パネル内の 2 つのスクロール パネルが含まれます。別の方法で 2 つのスクロール パネルに要素を追加したいと考えています。私のコードは次のようになります(関連する部分のみ):

public window() {
  contentPane = new JPanel(); // Plus some methods like setLayout or setBorder for the    contentpane

   JScrollPane scrollPane1 = new JScrollPane();
   contentPane.add(scrollPane1);  

   JScrollPane scrollPane2 = new JScrollPane();
   contentPane.add(scrollPane2);  
}

public static void addItems(ArrayList<String> list)
{
    Window w = new Window();

    for(String s : list)
    {
       w.contentPane.scrollPane1.addElement(s);
    /* Normally it should be something like this, but I just get access 
    to the contentPane and cannot add anything directly to the ScrollPanes. */      
    }
}

単一のコンポーネントへの直接アクセスを拒否する特別な設定はありますか?

編集: @summerbulb のおかげで、メソッドにいくつかの変更を加えましたaddItems。現在は次のようになっています。

    public static void addItems(ArrayList<String> appList)
{
    WindowAppsAndHardware w = new WindowAppsAndHardware();
    Component[] components = w.contentPane.getComponents(); 
    Component component = null; 

    for(String s : appList)
    {
    for (int i = 0; i < components.length; i++) 
    { 
       component = components[i]; 
       if (component.getName().equals("scrollPane1")); 
       { 
         Label lbl = new Label();
         lbl.setName(s);
         component.addElement(lbl); 
         /*Here I want to add the Label to the component,
         but component dont have the `addElement`-Method.*/
       } 
    }
    }
}
4

2 に答える 2

1

あなたのイニシャルは直感的に見えるかもしれませんが、考えてみると、それは真実ではありません。

w.contentPaneWindowあなたのクラスでありcontentPane、そのクラスのメンバーであるため、正常に動作します。ただし、 のメンバーとしてcontentPane.add(scrollPane1);追加されません。scrollPane1contentPane

必要なものは次のとおりです。

Component[] components = w.contentPane.getComponents(); 
Component component = null; 
for (int i = 0; i < components.length; i++) 
{ 
   component = components[i]; 
   if (component == scrolPane1) 
   { 
      component.addElement(s);
   } 
} 

編集:(OPが彼の質問を編集した後)
この回答は、( JScrollPane APIに基づいて)に要素を追加することは想定されていないと述べていますJScrollPane。代わりに、次のことを行う必要があります。

JPanel view = (JPanel)scrollPane.getViewPort().getView();
view.addItem(s);
于 2013-10-31T17:43:36.173 に答える