下午用NetBeans开发了一个简单的桌面应用程序,其中使用卡片布局CardLayout进行组件布局。顺利地把相关组件拖好之后,又将几个button的监听器写好,以为就大功告成了。但当运行时,却出现如下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout

为了整个纠结了半天,在网上也没有找到相关的答案,经过一段折磨后算是把问题解决,拿来晒晒,供大家参考。

首先,出现这个异常的原因很简单,就是卡片的父容器设置有误,具体细节可以参见API。而具体到NetBeans下的开发,可以看到NetBeans进行CardLayout布局的hih是不会将CardLayout作为当前类的成员属性的,而只是在initComponent里面直接进行布局设置。但在监听器里进行卡片间的切换是又必须使用CardLayout这个布局,这样问题就出现啦。下面给出解决方案:

1、手动把CardLayout添加为当前窗体类的成员属性

2、在卡片切换的监听器,如next、show等之中使用(CardLayout)(this.getLayoutManager).next(……)即可,其他相关监听器类似设置即可。

 

至于NetBeans中自动生成的代码无法修改的问题,还没有找到比较好的解决办法,有一个笨方法就是复制、粘贴、再修改,大家都懂的。

欢迎大家交流经验,共同进步。