JPanel的add方法的问题,疑惑中

liumingwei2009 2010-01-07 10:48:02
JPanel有一个继承的方法add
add
public void add(Component comp,
Object constraints)将指定的组件添加到此容器的尾部。同时通知布局管理器使用指定的 constraints 对象将组件添加到此容器的布局中。对于 addImpl(java.awt.Component, java.lang.Object, int) 来说,这是一种便捷的方法。
注:如果已经将某个组件添加到显示的容器中,则必须在此容器上调用 validate,以显示新的组件。如果添加多个组件,那么可以在添加所有组件之后,通过只调用一次 validate 来提高效率。


参数:
comp - 要添加的组件
constraints - 表示此组件的布局约束的对象
从以下版本开始:
JDK1.1
另请参见:
addImpl(java.awt.Component, java.lang.Object, int), validate(), JComponent.revalidate(), LayoutManager


这个应该怎样理解?
如果我添加的constraints是String类型的怎样理解?

我搜到一个一样问题好像没有完全解决啊

http://topic.csdn.net/u/20081015/12/fa35f21f-8e02-46b5-93d1-45ac57aac846.html
...全文
1569 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengguohua521 2012-02-24
  • 打赏
  • 举报
回复
就你说的情况,在JPanel中间容器里面出现add(component,string)是由可能的,譬如:如果你要在JPanel里面实现CardLayout布局,那么首先是需要将组件添加到JPanel里面,然后才能在方法(ActionLisetener)中实现对容器中组件的切换。
CardLayout card=new CardLayout(5,5);
JPanel pane=new JPanel(card);// 这个
Jbutton btOne=new JButton("one");
JButton btTwo=new JButton("two");
pane.add(btOne,"p1");
pane.add(btTwo,"p2");

btOne.addActionLisetener(new ActionLisetener(){car.show(pane,"p1")});
btTwo.addActionLisetener(new ActionLisetener(){car.show(pane,"p2")});
理解不深刻,请指教!
monkeyking1987 2010-01-07
  • 打赏
  • 举报
回复
其实你看的太复杂了.实际使用时使用JPanel默認的布局管理器FlowLayout(如果换成别的布局管理器也行),再调用JPanel的add(Component c)方法即可.
不用太去关心那个String参数.
一洽客服系统 2010-01-07
  • 打赏
  • 举报
回复
先不看addImpl方法 估计你肯定用过 add(cc,BorderLayout.CENTER) 或add(cc,"center")吧
当然你的panel此时谁知的layout代码为setLayout(new BorderLayout());
borderlayout就是一个layoutmanager
gridbag的同样也是一样理解 并没有所谓的add(Component c,String ss)方法 如果有这个方法至少borderlayout的约束就失效了
一洽客服系统 2010-01-07
  • 打赏
  • 举报
回复
看看API应该不难理解吧 约束就是布局中指定位置的
BorderLayout.CENTER 的值就是string类型的 值为center
再者API中也提到了如果使用的是gridbaglayout的话 那么他加入的约束必须是
GridBagConstraints 对象 GridBagConstraints 对象指定了 此组件在layout中的位置 高度 描点 间隔等等 有了指定的约束 布局管理器才知道将comp放在什么位置啊
一洽客服系统 2010-01-07
  • 打赏
  • 举报
回复
addImpl
protected void addImpl(Component comp,
Object constraints,
int index)将指定组件添加到此容器的指定索引所在的位置上。此方法还通知布局管理器,通过 addLayoutComponent 方法,使用指定的约束对象将组件添加到此容器的布局中。
这些约束是由正使用的特定布局管理器定义的。例如,BorderLayout 类定义了五个约束:BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.EAST、BorderLayout.WEST 和 BorderLayout.CENTER。

GridBagLayout 类需要一个 GridBagConstraints 对象。如果传递正确的约束对象类型时失败,则会导致 IllegalArgumentException。

如果当前布局管理器实现了 LayoutManager2,则在其上调用 LayoutManager2.addLayoutComponent(Component,Object)。如果当前布局管理器没有实现 LayoutManager2,并且约束是一个 String,则在其上调用 LayoutManager.addLayoutComponent(String,Component)。

如果该组件不是此容器的祖先容器,并且有一个非 null 父组件,则在将该组件添加到此容器之前,从其当前父组件中移除它。

在其他所有添加方法引用此方法时,如果某个程序需要追踪每个添加到容器的请求,那么这就是要重写的方法。被重写的方法通常应该包括一个对该方法的超类版本的调用:


super.addImpl(comp, constraints, index)


参数:
comp - 要添加的组件
constraints - 表示此组件的布局约束的对象
容器列表中插入组件的位置;其中 - -1 表示将组件追加到尾部
抛出:
IllegalArgumentException - 如果 index 无效;如果 comp 是此容器的子容器,则有效范围是 [-1, getComponentCount()-1];如果组件不是此容器的子容器,则有效范围是 [-1, getComponentCount()]
IllegalArgumentException - 如果 comp 是此容器的祖先容器
IllegalArgumentException - 如果向容器添加一个窗口
NullPointerException - 如果 comp 为 null
从以下版本开始:
JDK1.1
另请参见:
add(Component), add(Component, int), add(Component, java.lang.Object), LayoutManager, LayoutManager2

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧