Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导航到CardLayout中以前可见的卡_Java_Swing_User Interface_Arraylist_Cardlayout - Fatal编程技术网

Java 导航到CardLayout中以前可见的卡

Java 导航到CardLayout中以前可见的卡,java,swing,user-interface,arraylist,cardlayout,Java,Swing,User Interface,Arraylist,Cardlayout,我有一张带有卡片布局的表单。在这个布局中,我有很多卡片。一切都很顺利,直到我不得不创建一种方法,通过使用按钮xclixck“移动到上一个xcarsd”。CardLayout默认的next()和back()都是无用的,因为我不知道用户将如何进入特定的卡 因此,我尝试管理一个被导航的卡片列表,并在单击按钮时将其向后移动。下面是我的实现 private List<String> goBackListHolder = new ArrayList<String>();

我有一张带有
卡片布局的表单
。在这个布局中,我有很多卡片。一切都很顺利,直到我不得不创建一种方法,通过使用按钮xclixck“移动到上一个xcarsd”。CardLayout默认的
next()
back()
都是无用的,因为我不知道用户将如何进入特定的卡

因此,我尝试管理一个被导航的卡片列表,并在单击按钮时将其向后移动。下面是我的实现

  private List<String> goBackListHolder = new ArrayList<String>();
    private int firstPage = 0;

//Listeners
    private class AddNewClientsBtnAction extends MouseAdapter
    {
        @Override
        public void mouseClicked(MouseEvent e) 
        {
            CardLayout card = (CardLayout)mainPanelHolder.getLayout();
            card.show(mainPanelHolder, "new_client_form");
            goBackListHolder.add("new_client_form");
            firstPage++;
        }
    }

    private class AddProviderBtnAction extends MouseAdapter
    {
        @Override
        public void mouseClicked(MouseEvent e) 
        {
            CardLayout card = (CardLayout)mainPanelHolder.getLayout();
            card.show(mainPanelHolder, "new_provider_form");
            goBackListHolder.add("new_provider_form");
            firstPage++;
        }
    }

    private class AddIntroducerBtnAction extends MouseAdapter
    {
        @Override
        public void mouseClicked(MouseEvent e) 
        {
            CardLayout card = (CardLayout)mainPanelHolder.getLayout();
            card.show(mainPanelHolder, "new_introducer_form");
            goBackListHolder.add("new_introducer_form");
            firstPage++;
        }
    }

    private class AddIntroducerBtnAction2 extends MouseAdapter
    {
        @Override
        public void mouseClicked(MouseEvent e) 
        {
            CardLayout card = (CardLayout)mainPanelHolder.getLayout();
            card.show(mainPanelHolder, "new_introducer_form");
            goBackListHolder.add("new_introducer_form");
            firstPage++;
        }
    }


// The listener of the Back Button

    private class GoBackBtnAction extends MouseAdapter
        {
            @Override
            public void mouseClicked(MouseEvent e) 
            {
                if(firstPage==0){}
                else
                {
                CardLayout card = (CardLayout)mainPanelHolder.getLayout();
                firstPage--;
                card.show(mainPanelHolder, goBackListHolder.get(firstPage));

                }
            }
        }
private List goBackListHolder=new ArrayList();
private int firstPage=0;
//听众
私有类AddNewClientsBtnAction扩展了MouseAdapter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
CardLayout卡=(CardLayout)mainPanelHolder.getLayout();
卡片展示(主面板持有人,“新客户表格”);
goBackListHolder.添加(“新客户表格”);
首页++;
}
}
私有类AddProviderBtnAction扩展了MouseApter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
CardLayout卡=(CardLayout)mainPanelHolder.getLayout();
卡片展示(主面板持有人,“新供应商表格”);
goBackListHolder.add(“新供应商表格”);
首页++;
}
}
私有类AddInProducerbtNaction扩展了MouseApter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
CardLayout卡=(CardLayout)mainPanelHolder.getLayout();
卡片展示(主面板持有人,“新介绍人表格”);
goBackListHolder.添加(“新介绍人表格”);
首页++;
}
}
私有类AddInProducerBTNAction2扩展了MouseApter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
CardLayout卡=(CardLayout)mainPanelHolder.getLayout();
卡片展示(主面板持有人,“新介绍人表格”);
goBackListHolder.添加(“新介绍人表格”);
首页++;
}
}
//后退按钮的侦听器
私有类GoBackBtnAction扩展了MouseAdapter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
如果(第一页==0){}
其他的
{
CardLayout卡=(CardLayout)mainPanelHolder.getLayout();
第一页--;
card.show(mainPanelHolder、goBackListHolder.get(首页));
}
}
}
这是可行的,但有时它会断裂,移动到错误的位置。上面的代码并不完整,因为有大量的侦听器

那么,关于如何解决这个问题,有什么想法吗

但过了一段时间,它会断裂,移动到错误的地方

很难调试随机问题,因此解决方案是消除潜在的错误

上面的代码并不完整,因为有大量的侦听器

可能您的某个侦听器中的代码不正确。也就是说,你可能有一个卡名的拼写错误,这是造成问题的原因

根据张贴的代码,您总是使用
show(xxx)
方法移动到另一张卡

因此,我将扩展
CardLayout
并添加自定义代码,而不是将自定义代码添加到ActionListeners。也就是说,我将覆盖
show(…)
方法来跟踪您要显示的卡。因此,每次调用
show(…)
方法时,您都会将卡名添加到ArrayList中

您还需要将
undoCard(…)
方法添加到扩展卡布局中,以移回上一张卡。把所有的逻辑放在一个地方

并在单击按钮时向后移动列表

我不知道你的要求是只回去,还是你还需要继续前进的能力

如果只需要返回,则不需要“firstPage”变量。要转到上一张卡,您只需从ArrayList中删除最后一个条目,然后转到现在是ArrayList中最后一个条目的卡

无论如何,这个建议的要点是,通过将代码移动到定制的CardLayout,您可以最大限度地减少应用程序中的编码需求,这也可以最大限度地减少出错的可能性

但过了一段时间,它会断裂,移动到错误的地方

很难调试随机问题,因此解决方案是消除潜在的错误

上面的代码并不完整,因为有大量的侦听器

可能您的某个侦听器中的代码不正确。也就是说,你可能有一个卡名的拼写错误,这是造成问题的原因

根据张贴的代码,您总是使用
show(xxx)
方法移动到另一张卡

因此,我将扩展
CardLayout
并添加自定义代码,而不是将自定义代码添加到ActionListeners。也就是说,我将覆盖
show(…)
方法来跟踪您要显示的卡。因此,每次调用
show(…)
方法时,您都会将卡名添加到ArrayList中

您还需要将
undoCard(…)
方法添加到扩展卡布局中,以移回上一张卡。把所有的逻辑放在一个地方

并在单击按钮时向后移动列表

我不知道你的要求是只回去,还是你还需要继续前进的能力

如果只需要返回,则不需要“firstPage”变量。要转到上一张卡,您只需从ArrayList中删除最后一个条目,然后转到现在是ArrayList中最后一个条目的卡

无论如何,这个建议的要点是,通过将代码移动到定制的CardLayout,可以最大限度地减少在应用程序中编码的需要
+---------------+
|new_client_form|
+---------------+
firstPage == 1 <- this is already wrong. List is indexed at 0.
+---------------+   +-----------------+
|new_client_form|-->|new_provider_form|
+---------------+   +-----------------+
firstPage == 2
+---------------+   +-----------------+
|new_client_form|-->|new_provider_form|
+---------------+   +-----------------+
firstPage == 1
+---------------+   +-----------------+   +-------------------+
|new_client_form|-->|new_provider_form|-->|new_introducer_form|
+---------------+   +-----------------+   +-------------------+
firstPage == 2
//Empty stack
+-----------------+
| new_client_form |
+-----------------+
+-------------------+
| new_provider_form |
+-------------------+
|  new_client_form  |
+-------------------+
+---------------------+
| new_introducer_form |
+---------------------+
|  new_provider_form  |
+---------------------+
|   new_client_form   |
+---------------------+
+-------------------+
| new_provider_form |
+-------------------+
|  new_client_form  |
+-------------------+
//Here you get the new_introducer_form passed back
+-----------------+
| new_client_form |
+-----------------+
// Here you get the new_provider_form passed back.
//Empty stack.
//Here you get the new_client_form passed back.