我用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.*/
}
}
}
}
答案 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附加到窗口的地方,所以这就是为什么你无法访问它的孩子。