java - 我在Java中使用这个方法调用时调用的方法是什么?

标签 java swing jframe

import javax.swing.*;

class Foo{

        public static void main(String args[]){
            JFrame f=new JFrame();
            f.add("North",new JButton());    //Line 1
            f.add(new JButton(),"North");    //Line 2
            f.setVisible(true);
    }
}

swing API 声明 JFrame 类包含 5 个名为 add 的方法,继承自 java.awt.Container 和另一个继承自 java.awt.Component 的 add 方法。

**Their signatures are as follows:**

*Inherited from java.awt.Container*

    add(Component)

    add(Component,int)

    add(Component,Object)

    add(Component,Object,int)

    add(String,Component)

*Inherited from java.awt.Component*

    add(java.awt.PopupMenu)

我预计在 API 中会有两个重载方法,其签名为 add(Component,String) 和 add(String,Component)。但鉴于情况并非如此,我假设第 1 行调用 add(String,Component) 而第 2 行调用 add(Component,Object)。

还有,谁能给我解释一下调用的方法是如何实现的。我试图通过查看 API 的源代码来解决这个问题,但是方法调用链就像一个迷宫,我可以使用以前去过那里的人的指导。

最佳答案

最终,他们都调用Container#addImpl(Component, Object, int) , 期待 add(PopupMenu)

  • add(Component) 调用 addImpl(comp, null, -1)
  • add(String, Component) 调用 addImpl(comp, name, -1)
  • add(Component, int) 调用 addImpl(comp, null, index)
  • add(Component, Object) 调用 addImpl(comp, constraints, -1)
  • add(Component, Object, int) 调用 addImpl(comp, constraints, index)

addImpl 做了很多工作...

它确保;

  • 组件是自己添加的
  • 该组件不是 Window 类型(因为您不能向组件添加窗口)
  • 组件的图形配置相同
  • 该组件尚未包含在现有容器中,如果是则将其删除
  • 该组件是在有效索引范围内添加的(如果 index > -1)

然后...

  • 将组件添加到此容器管理的组件列表中
  • 调用组件的addNotify方法(如果容器在屏幕上实现)
  • 通知布局管理器新添加的组件
  • 通知所有监听器有关容器事件 (componentAdded) 和层次结构事件 (hierarchyChanged)

额外

“添加”方法是装饰器。他们提供了许多入口方法,这些方法可以过滤成一个方法,目的是根据工作的上下文使开发人员的生活更简单。

关于java - 我在Java中使用这个方法调用时调用的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14722498/

相关文章:

java - 组件未从 ArrayList 中显示

java - 在 java 中构建 2D map 的其他方法

java - 如何围绕框布局制作 JScrollpane

java - 如何在java游戏中分离 View 和模型?

java - 带有 scrollView 的键盘

java - 创建后台(前台?)服务来计算时间并在整个应用程序生命周期中更新 ui(如 endemondo 中)

java - 在 Eclipse 中调试全屏应用程序

java - 如何实现布料数字找好友?

java - 在 JPanel 中在图像上绘制形状

java - Java中如何使用Jframe登录成功后显示用户信息[登录表单]