Java GUI开发中的坑(一)----HeavyWeight组件与LightWeight组件

本文探讨了Java GUI开发中的HeavyWeight(原生组件)与LightWeight(仿造组件)的区别及常见问题。文章指出,混用两者可能导致界面重叠、第三方组件兼容性和渲染效率的挑战。作者分析了AWT、SWING、SWT和JavaFX的优缺点,以及在实际开发中如何权衡性能和平台一致性。
摘要由CSDN通过智能技术生成

一,前言

Java GUI开发中常用的库有AWT、SWING、SWT、JFACE和JavaFX,如果做几个窗口的小程序,选哪个库并不重要,
但是如果要开发几十个窗体的大客户端,你最好先把这篇文章看完。

二,Java GUI库的基本原理

要理解HeavyWeight与LightWeight组件,要先从GUI库的原理说起,Java GUI库为了满足跨平台特性,具体实现机制相当复杂,本人不才,这里就简单谈一下我自己大致的理解。

三大平台Windows、Linux、Mac都有自己的原生窗体组件,Linux更是有GNOME、KDE等多种桌面,要在这几大平台上抽象出一个统一的GUI库来,难度很大,所以第一个JavaGUI库AWT使用的策略是,提取出三大平台都支持的UI组件,封装成Java库(最大公约数策略),这样一来,AWT只实现一些基本组件,没有像树状图之类的复杂组件。后续的SWING填补了这一缺陷,用JAVA代码实现了很多复杂组件,这样SWING就相当于“AWT + Java代码”,为什么要说“Java代码”呢?因为AWT虽然也是java写的,但是UI组件还是调用系统自己UI组件库,而“Java代码”,则是SWING使用Java 2D类(Java 2D类再调用底层paint(Graphics))自己绘制窗体,SWING虽然界面内容更丰富,更好看,各平台风格更统一,但是因为使用Java 2D绘图,效率远不及调用系统原生组件的AWT。

那SWT和JFACE是什么?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整理了Java GUI编程基础知识! public class AllFrame { /** * 这里的代码涉及到 GUI 编程基本面板、基本组件、事件(ActionListener、ChangeListener、MouseListener) */ public AllFrame() { // new 一个主窗体 也可以这样写 new MainFrame(); MainFrame mf = new MainFrame(); } public static void main(String[] args) { new AllFrame(); } // 主窗体 继承 窗体基本格式 类 Jframe 以下弹出窗口均继承 Jframe class MainFrame extends Jframe implements ActionListener { JMenuBar menubar = new JMenuBar();;// 菜单条 JMenu jmenu[] = new JMenu[5];// panelMenu,usedMenu1,usedMenu2,layoutMenu,helpMenu; // 菜单项 JButton closebtn;// 关闭窗体 // 具体的选项 JMenuItem panelitem[] = new JMenuItem[4]; JMenuItem useditem1[] = new JMenuItem[6]; JMenuItem useditem2[] = new JMenuItem[6]; JMenuItem layoutitem[] = new JMenuItem[3]; JMenuItem helpitem = new JMenuItem("关于"); // 菜单名称 String menu[] = { "面板使用", "常用组件一", "常用组件二", "布局设置", "帮助" }; String pane[] = { "普通面板", "滚动面板", "分割面板", "选项面板" }; String uesd1[] = { "标签", "按钮", "文本框", "文本域", "单选按钮" ,"微调"}; String uesd2[] = { "滑块","复选框", "下拉菜单", "列表", "表格", "树状" }; String layout[] = { "流式布局", "边界布局", "网格布局" }; // Jpanelitem,Jscrollpaneitem,Splitpaneitem,JTabbedpanelitem, // Jlabelitem,Jbuttonitem,JTextfielditem,JTextareaitem,JRadiobuttonitem, // JCheckboxitem,JCombomoxitem,Jlistitem,Jtableitem,Jtreeitem, // Flowlayoutitem,Borderlayoutitem,Girdlayoutitem, // Helpitem}; public MainFrame() { this.setTitle("JAVA图型界面学习(GUI)"); // 加载菜单条到窗体 this.setJMenuBar(menubar); // 重新设置大小 this.setSize(380, 290); // 简单的居方法 在窗体基本格式类 Jframe 有详细的居方法 this.setLocationRelativeTo(null); // 设置关闭窗口 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 调用方法 menu(); // 设置容器 Container con = this.getContentPane(); // 定义一个 标签 “JAVA图型界面学习” JLabel jl = new JLabel("JAVA图型界面学习"); // 组件 设置字体大小, 其他组件用法相同 jl.setFont(new Font("隶书", Font.BOLD, 24)); // 具体定位 组件名.setBounds(x, y, width, height) jl.setBounds(30, 30, 280, 50); // 把标签加到 con 容器 con.add(jl); /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值