注意 我提前为我的问题冗长而道歉。我觉得描述程序是一个更好的选择,而不是发布我的全部代码。
以下是我的计划的一些背景信息,以帮助描述我的问题:
我正在创建一个任务计划员。面板分成两半,以便有两个部分,顶部和底部。另外增加了两个面板,每半个面板一个。顶部面板用于正在进行的任务;底部是完成的。两个面板都包含容器,分配本身,包含不同的组件(日期和描述的标签,编辑按钮和复选框)。
我的问题在于ActionListener的复选框。复选框的目的是在To-Do和Completed面板之间移动容器(即分配),具体取决于是否单击它。因此,ActionListener需要知道容器的父面板,以便它可以相应地执行操作。现在我将使用一个字段作为复选框,以便我可以直接使用它的getParent()方法,但是复选框有多个实例(因为它在创建新赋值的方法中多次创建)。作为一个字段,ActionListener总是移动第一个容器,无论点击的复选框是否来自不同的分配。
如果它是局部变量,有没有办法在自己的侦听器中引用复选框?更具体地说,我可以获得所述复选框的父容器吗?
这是ActionListener(在发布的代码中,cb是复选框的字段):
private class CheckBoxListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
int numOfParticularContainer;
//System.out.println(parent + "\n" + toDoList);
numOfParticularContainer = container.indexOf(cb.getParent());
JPanel parent = (JPanel)container.get(numOfParticularContainer).getParent();
if(parent == toDoList)
{
toDoList.remove(container.get(numOfParticularContainer));
completed.add(container.get(numOfParticularContainer));
toDoList.revalidate();
toDoList.repaint();
completed.revalidate();
completed.repaint();
}
else if(parent == completed)
{
completed.remove(container.get(numOfParticularContainer));
toDoList.add(container.get(numOfParticularContainer));
toDoList.revalidate();
toDoList.repaint();
completed.revalidate();
completed.repaint();
}
}
}
这是一个不同的问题
这个问题询问是否可以从内部类访问局部变量。
另一个问题是如何确定容器在JPanels的ArrayList中的哪个元素。
这里提到getParent()的唯一原因是在使用局部变量的情况下。这些与远射无关。仅仅因为我问同一个程序的两个问题不等于重复的问题。
答案 0 :(得分:1)
为JPanel提供CheckBoxListener
参数,当您将CheckBoxListener
添加为侦听器时,只需将您想要的JPanel作为参数。
示例:
private class CheckBoxListener implements ActionListener
{
private JPanel parent;
public CheckBoxListener(JPanel parent) {
this.parent = parent;
}
//other methods
}