如果组件是方法

时间:2017-06-02 23:41:01

标签: java swing actionlistener

注意 我提前为我的问题冗长而道歉。我觉得描述程序是一个更好的选择,而不是发布我的全部代码。

以下是我的计划的一些背景信息,以帮助描述我的问题:

我正在创建一个任务计划员。面板分成两半,以便有两个部分,顶部和底部。另外增加了两个面板,每半个面板一个。顶部面板用于正在进行的任务;底部是完成的。两个面板都包含容器,分配本身,包含不同的组件(日期和描述的标签,编辑按钮和复选框)。

我的问题在于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()的唯一原因是在使用局部变量的情况下。这些与远射无关。仅仅因为我问同一个程序的两个问题不等于重复的问题。

1 个答案:

答案 0 :(得分:1)

为JPanel提供CheckBoxListener参数,当您将CheckBoxListener添加为侦听器时,只需将您想要的JPanel作为参数。

示例:

private class CheckBoxListener implements ActionListener
    {
        private JPanel parent;

        public CheckBoxListener(JPanel parent) {
              this.parent = parent;
        }
        //other methods
    }