gpt4 book ai didi

java - 如果组件对于方法而言是本地的,则从其自己的监听器引用该组件

转载 作者:行者123 更新时间:2023-11-30 06:41:18 25 4
gpt4 key购买 nike

注意我提前为我的问题的冗长表示歉意。我觉得描述该程序比发布整个代码会是更好的选择。

以下是我的程序的一些背景信息,可帮助描述我的问题:

我正在创建一个作业规划器。面板被分成两半,因此有两个部分:顶部和底部。添加另外两个面板,每一半一个。顶部面板用于正在进行的任务;底部是已完成的。两个面板都包含容器,即作业本身,其中包含不同的组件(日期和描述标签、编辑按钮和复选框)。

我的问题出在复选框的 ActionListener 上。该复选框的用途是在“待办事项”和“已完成”面板之间移动容器(也称为作业),具体取决于是否单击它。因此,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();
}
}
}

这是一个不同的问题

此问题询问是否可以从内部类访问局部变量。

另一个问题询问如何找出容器位于 JPanel 的 ArrayList 中的哪个元素。

这里提到 getParent() 的唯一原因是在将它与局部变量一起使用的情况下。从长远来看,这些都没有关联。仅仅因为我问关于同一程序的两个问题并不等于重复的问题。

最佳答案

为 JPanel 提供 CheckBoxListener 参数,当您将 CheckBoxListener 添加为监听器时,只需将所需的 JPanel 作为参数即可。

示例:

private class CheckBoxListener implements ActionListener
{
private JPanel parent;

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

关于java - 如果组件对于方法而言是本地的,则从其自己的监听器引用该组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com