Java:使用其他方法向Panel添加元素

时间:2013-10-31 17:25:52

标签: java swing variables jframe windowbuilder

我用Eclipse的Windowbuilder创建了一个Window。该窗口包含内容面板和内容面板中的两个滚动面板。我想用不同的方法向两个滚动面板添加元素。我的代码看起来像这样(只是相关部分):

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.*/
       } 
    }
    }
}

2 个答案:

答案 0 :(得分:1)

虽然你的初始可能看起来很直观,但是当你想到它时,却不可能是真的。

w.contentPane工作正常,因为Window是您的班级,contentPane是该班级的成员。但contentPane.add(scrollPane1);不会将scrollPane1添加为contentPane的成员。

您需要的是:

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编辑他的问题后)
This answer个州(基于JScrollPane API)表示您不应该向JScrollPane添加元素。相反,你应该这样做:

JPanel view = (JPanel)scrollPane.getViewPort().getView();
view.addItem(s);

答案 1 :(得分:0)

我不确定,因为我之前没有这样做,但看起来你正试图访问窗口上的contentPane,但是代码中没有你将contentPane附加到窗口的地方,所以这就是为什么你无法访问它的孩子。