Frame和JFrame的区别

  • 设置关闭按钮功能的区别
    • Frame设置关闭按钮
    • JFrame设置关闭按钮
  • add方法的区别
    • Frame用 add(子件)增加子件
      • Frame的默认layout是BorderLayout
    • JFrame有add(子件) 和 getContentPane().add(子件)
      • JFrame直接add(子部件)方法
        • JFrame覆盖了Container的addImpl方法, 所以 JFrame的add 和 Frame的add 不一样
      • JFrame的 getContentPane().add(子部件)
        • JFrame自带JRootPane和getRootPane() 方法 , JRootPane自带JPane
        • getContentPane()返回RootPane的JPane, 所以JFrame自带JPane
        • 自带JPanel的layout是 JRootPane中的匿名内部类, 继承自 BorderLayout
      • 所以JFrame 的 add() 等价 getContentPane().add() 等价 getRootPane().getContentPane().add()
      • JFrame 的 JRootPane
  • Frame默认没有Panel , JFrame默认有多个JPanel , JPanel不是Panel的子类
    • getRootPane()
    • getGlassPane()
    • getLayeredPane()
    • getContentPane()
  • JFrame继承了Frame的setMenuBar()方法, 也自己新增的setJMenuBar()方法
  • 一些测试代码
    • 测试代码1
    • 测试代码2

设置关闭按钮功能的区别

Frame设置关闭按钮

     frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});

     Frame I = frame;frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {I.dispose();}});

     frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {Window window=(Window)e.getComponent();window.dispose();}});

JFrame设置关闭按钮

     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

也可用和Frame相同的方式


add方法的区别

  • Frame add的子件的 Parent 是 Frame
  • JFrame多出getRootPane() , getGlassPane(), getLayeredPane() , getContentPane() 方法
  • java5后 jframe.add() 和 jframe.getContentPane().add() 的效果相同

Frame用 add(子件)增加子件

Frame的默认layout是BorderLayout

可以用:

  • .add(子部件, BorderLayout.EAST);
  • .add(子部件, BorderLayout.WEST);
  • .add(子部件, BorderLayout.SOUTH);
  • .add(子部件, BorderLayout.NORTH);
  • .add(子部件, BorderLayout.CENTER);

增加子部件

JFrame有add(子件) 和 getContentPane().add(子件)

JFrame继承自Frame

public class JFrame  extends Frame implements WindowConstants,Accessible,RootPaneContainer,TransferHandler.HasGetTransferHandler

JFrame直接add(子部件)方法

默认的add方法和Frame的一样, 都是继承自Container类的add方法
Jframe ▶ Frame ▶ Window ▶ Container ▶ Component ▶ Object

JFrame的默认layout也是BorderLayout

System.out.println(jframe.getLayout()); // java.awt.BorderLayout[hgap=0,vgap=0]

可以用:

  • .add(子部件, BorderLayout.EAST);
  • .add(子部件, BorderLayout.WEST);
  • .add(子部件, BorderLayout.SOUTH);
  • .add(子部件, BorderLayout.NORTH);
  • .add(子部件, BorderLayout.CENTER);

增加子部件

JFrame覆盖了Container的addImpl方法, 所以 JFrame的add 和 Frame的add 不一样

据说java1.4之前 JFrame直接用add会出现不可预测的情况, 但现在可以了
add调用了addImpl
java17的源代码如下

JavaAwtSwing笔记之 Frame和JFrame的区别相关推荐

  1. Frame 与JFrame 的区别

    Frame和JFrame的区别: 1.JFrame是Frame的子类,JFrame在javax.swing包内,Frame在包java.awt中 2.关闭窗口的方式不同: Frame: Frame加监 ...

  2. java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】

    初学Java的时候一直弄不清Frame和Panel的区别,都是在上面装组件,也没看出什 么所以然,一直稀里糊涂地用.最近看来一下Java类库中几个主要类的源文件,才明白 了一点所以然.写下了此文,希望 ...

  3. Java --Frame和Panel的区别

    初学Java的时候一直弄不清Frame和Panel的区别,都是在上面装组件,也没看出什 么所以然,一直稀里糊涂地用.最近看来一下Java类库中几个主要类的源文件,才明白 了一点所以然.写下了此文,希望 ...

  4. VC++学习笔记(BITMAP与CBitmap的区别)

    VC++学习笔记(BITMAP与CBitmap的区别) BITMAP是一个结构,保存了一些位图的信息: CBitmap是个类,用法:CBitmap bitmap;//创建对象 bitmap.LoadB ...

  5. frame,iframe,frameset 的区别

    frame,iframe,frameset 的区别 <FRAMESET> <FRAME> <NOFRAMES> <IFRAME> 欲明白本篇[HTML剖 ...

  6. ASP.Net学习笔记003--网站和WebApplication的区别

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  7. frame 和 bounds的区别

    这篇是见过写的最为详细易懂的文章: frame与bounds的区别详解 - 简书 简单概括下: 1.bounds和frame都是属于CGRect类型的结构体,系统的定义如下,包含一个CGPoint(起 ...

  8. OC语言篇—学习笔记1—C和OC的区别

    学习笔记1-C和OC的区别 1.文件的后缀名 OC:类的头文件 .h,类的实现文件 .m C:类的头文件 .h,类的实现文件.c 2.导入头文件方式 C语言使用include导入头文件,如果想多次引用 ...

  9. 【转】frame与bounds的区别比较

    翻译文档上的bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块.很明显一个是自己为原点的坐标系,一个 ...

  10. frame与bounds的区别比较

    翻译文档上的
bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小
区别主要在坐标系这一块.

很明显一个是自己为原点的坐标 ...

最新文章

  1. Erlang之父给程序员的两点忠告 | 缅怀
  2. ios 打印 详细错误日志_关于Xcode不能打印崩溃日志
  3. 机器学习Basics-第九期-CNN卷积神经网络详解
  4. 为什么说Python是伟大的入门语言
  5. Glib实例学习(5)平衡二叉树
  6. 如何使用Python2和Python3
  7. php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
  8. Every column needs a corresponding expression. No expression found for xxxx
  9. 【自适应(盲)均衡6】信号过多径衰落信道的矩阵乘法表示之Toeplitz矩阵和Toeplitz块矩阵的生成(分数间隔FSE)
  10. 【牛客 - 318E】爱摸鱼的Dillonh(数学,暴力,细节)
  11. Puma单栏博客Typecho主题
  12. python 实现截图自动存入Excel表
  13. 数据驱动编程之表驱动法
  14. mysql5.7 主从复制的正常切换【转】
  15. caffe命令行解析
  16. Arduino - 红外接收
  17. google 能翻译104个语言 youtube 仅仅不支持其中的15个语言 分别是这些
  18. 图形界面操作pandas:计算变异系数(极差 四分位差 方差 标准差 协方差 变异系数)
  19. 子午线收敛角python代码
  20. linux rzsz(lrzsz)安装

热门文章

  1. Android 拼音搜索中文,包含多音字
  2. WPS中插入“公式”后行距不正常的解决办法
  3. SEO之关键词的选择
  4. 计算机word求差函数,表格里怎么自动求差/怎样在word2010表格中求差
  5. angular-6大主流前端框架(一)
  6. oracle怎么恢复误删除的列,三种方式恢复oracle数据库误删除的数据
  7. 自媒体运营技巧之抖音快手怎么上热门
  8. antd-vue 划上表格内容显示气泡框及提示内容
  9. 服务器四核cpu性能排行,服务器cpu性能排行
  10. 基于Arduino的智能小车-代码部分