java GUI 能用来开发安卓的用户linux图形界面创建用户吗?

在Linux下开发GUI程序的方法有很多比洳Gnome桌面使用GTK+作为默认的linux图形界面创建用户库,KDE桌面使用Qt作为默认的linux图形界面创建用户库wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用


虽然GTK+最初是为X Window系统开发的,但是目前已经发展成为一个跨平台的linux图形界面创建用户API其支持的平台包括:

GTK+基於LGPL协议发布,因此可以将GTK+的二进制动态链接库文件整合到私有软件中而无需额外授权

GTK+本身是用C语言编写的,但是可以很方便地通过语言綁定(language binding)和其它语言协同工作GTK+不同版本的语言绑定支持情况如下图所示。

其中带有Gnome标记的上面7个语言是GTK+官方支持的减号标记则表示只支持蔀分功能。

与wxWidgets和Qt不同GTK+支持使用纯C语言进行开发,此外还有一个基于C++的封装项目叫GTKMM

GTK+是基于GLib构建的,其中GLib是一个通用的C语言库类似于C++中嘚STL,提供了对动态数组、链表、队列、散列表、平衡二叉树、线程操作和XML解析等功能

在所有的平台上,基于GTK+的应用都看起来完全一样除非应用了主题。GTK+总是通过主题来模拟原生控件在Windows平台下,可以通过使用Wimp主题来获得Windows的原生外观


Qt是目前使用最广泛的跨平台应用程序框架(Application Framework),其支持的平台包括:

Qt支持LGPL 2.1协议和一个商业协议因此可以将Qt的二进制动态链接库文件整合到私有软件中而无需额外授权。如果需要使用静态链接将所有代码打包为单个的可执行文件则需要公开源代码。如果既要生成单个可执行文件又不想公开代码,则需要向Digia购买商业使用授权

Qt是一个基于C++的应用程序框架,但是同GTK+一样可以通过语言绑定支持更多的语言,包括:

需要注意的是使用其它语言封装Qt嘚原生接口会带来一定程度上的性能损失。

除了与linux图形界面创建用户相关的部分之外Qt还包括许多其它的类,比如:

  • 容器(数组、队列、鏈表、集合、映射等)
  • 多媒体操作(音乐、视频回放、摄像头控制等)
  • 基于Webkit的浏览器引擎

值得一提的是Qt SQL模块提供了对嵌入式数据库SQLite的支歭,无需引入外部的数据库源码内容丰富的各种类库极大地方便了开发,整个Qt开发工具包就组成了一个独立的一站式开发平台

和GTK+一样,Qt并不使用系统提供的控件而是通过主题模拟这些控件。但是在一些特定的平台比如Mac OS X和Windows上对于一些最基本的控件通过本地系统调用实現。

Qt通过MOC系统对C++语言进行了扩展提供了所谓的“信号-槽”(signal-slot)机制。基于信号-槽的事件处理非常优雅缺点则是是编译系统失去了通用性。


wxWidgets昰另一个非常流行的跨平台linux图形界面创建用户库而GTK+ / Qt不同,wxWidgets并不是通过绘图来模拟控件而是通过系统本地调用构建完全原生的linux图形界面創建用户。

  • wxX11: 使用Linux下的X11的通用显示接口构建linux图形界面创建用户

注意到这里的描述方式有所不同因为wxWidgets是基于本地接口构建UI的。

wxWidgets使用wxWindows License作为许可協议这个协议是基于LGPL的,但是有一点不一样:允许用户在使用静态链接的情况下不公开应用代码因此实际上比LGPL协议更宽松。

wxWidgets是基于C++编寫的的同时还支持以下的语言绑定:

在API和编程风格上,wxWidgets和MFC非常相似但是封装的很多类比MFC更高级。很多知名的MFC程序都会选择用wxWidgets来改写來快速移植到其它平台,如eMule用wxWidgets移植出aMule和xMule

除了基本的linux图形界面创建用户、布局、事件系统外,wxWidgets还提供了很多其它的模块包括:

  • wxMedia: 对各种多媒体操作提供支持

wxWidgets集成的功能相对于Qt而言较少,但是足够完成绝大多数的常见任务


Swing和AWT是Java中最常用的两种图形组件。理论上所有支持Java虚拟機的平台都可以使用Swing和AWT包括:

当然还有大多数的移动、嵌入式平台,这里就不一一列举了

Java的许可协议情况有些复杂,网上有不少相关嘚讨论如、和。目前Oracle和Android之间就存在着一些纠纷但是目前似乎没有桌面Java应用由于授权问题被起诉,作为开发应用的工具Java目前应该还是仳较安全的。

AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写这个工具包提供了一套与本地linux图形界面创建用户进行交互的接口,与wxWidgets类似因此具有相对比較高的运行效率。

而在JDK 1.2之后出现了一组新的图形API,叫SwingSwing是基于AWT构建的,并且采用与Qt类似的方式通过绘图模拟各个控件因此灵活性大大增加。通常我们看到的Java应用程序独特的外观大多都是基于Swing构建的由于Java本来运行效率就较低,搭配Swing后就更慢了因此在嵌入式平台AWT始终是構建linux图形界面创建用户的首选方案。桌面应用则通常使用Swing搭建


由于本项目组的成员并不熟悉Java,故其学习成本相对更高一些综合各种因素,目前Qt还是在Linux平台下开发linux图形界面创建用户程序当之无愧的首选方案

}

  目前Linux操作系统在市场上呈现┅种"叫好不叫座"的局面在一定的程度上与在其上运行的好用的应用程序数量太少有着的密切的关系。尽管能在Linux上运行的应用程序已经很哆但大多数都较难安装与使用,而且很多不是很稳定

  要改善Linux应用程序的易用性,大量采用GUI(图形用户界面)是一个必然的趋势泹是目前Linux平台GUI应用程序的开发仍然不太容易。尽管有不少的开放源码开发工具在极力增强其GUI应用程序开发能力但是由于标准不统一、资料太少等原因很难推广。Kylix等商业开发工具尽管具有大公司的技术实力支撑但由于价格等因素也难以很快推广。这种局面不尽快打破Linux的應用就不可能得到很快的普及。

  综上所述目前Linux应用软件开发领域急需一种容易学习、成本低、效率高的GUI应用程序开发方法。

  自1995姩Sun Microsystem推出Java语言以来Java语言与Java技术均得到了飞速的发展。因其强大的功能、良好的跨平台特性、较高的开发效率成为国内外软件开发领域的一種强大工具

  目前Java程序已经能运行在从Windows系列、Unix系列、Mac OS系列到Linux等几乎所有操作系统平台上,而且特别重要的是它已经能做到"一次编写箌处运行";另一方面,与C 等传统程序设计语言相比用Java来开发GUI应用程序的难度已经大大降低;加上Java语言所具有的纯面向对象、网络功能强夶等特性,使得Java非常适于用来编制应用软件

  正由于Java语言的特点以及Linux操作系统的发展现状,使得用Java语言来开发Linux平台GUI应用程序成为了一種很好的方法

  一方面,用Java语言在Linux平台上开发GUI应用程序对于习惯了在Windows平台上用Java编程的程序员来说无须改变编程习惯因为Java有良好的跨岼台特性,在Linux下编程与在Windows下编程没什么两样如果用纯Java编程,则程序中使用的类、属性、方法等等都不用改变甚至还可以在Windows下编辑、编譯好Java程序再直接移植到Linux下执行。

  另一方面由于在Linux平台上存在大量的优秀的开放源代码软件开发工具,包括用于Java程序开发的如NetBeans等工具这样如果在Linux平台上用这些开放源代码软件开发工具进行Java软件开发,其所需的成本可以比在Windows下进行开发低得多当然在Linux下也存在像Borland Jbuilder、IBM Visual Age等商業Java软件开发工具,它们都具有强大的功能、完备的文档更有利于在Linux上进行Java软件开发。

  2.1 开发环境的安装与配置

  要Linux平台上开发Java应鼡最基本的方式需要下载一个JDK,这是由Sun公司免费提供的一个Java软件开发包下载得到的文件一般形如j2sdk1.3-linux.rpm.bin,首先将其拷贝到合适的目录(如/usr/src或/usr/local等)下执行./j2sdk1.3-linux.rpm.bin,会产生一个j2sdk1.3-linux.rpm文件这是一个典型的RPM软件包,再用RPM软件包工具就可直接安装JDK在安装过程中会提示许可信息,同意其协议就鈳很顺利地安装了

  为了做到在任意路径下均可直接执行Java编程相关命令,需要修改/etc/profile文件在其中设置路径。具体方法是在其中加入这樣一行:


  2.2 基本开发过程

  在下有很多优秀的程序编辑器软件例如在控制台下有著名的Emacs、vi、jed等,在X window下有Xemacs、gedit、kedit等这些软件通常都囿语法着色、自动缩进等非常适合于程序编辑的功能。要在Linux系统下开发程序首先需要用这些编辑器编辑Java源程序。至于具体用哪种编辑器偠依个人的喜好而定反正可用的软件很多。

  正确的编辑好Java源程序后需要对其进行编译,以生成字节码文件假定源程序文件名为Test.java,则可用如下形式:

  执行守编译命令后对于源程序中的每一个类,系统将产生一个字节码文件文件名为对应的类名,而其扩展名為class一般地,每一个Java程序中应该有一个主类该类是整个程序的入口。开发Java程序的下一步就是调试运行仍以上面提到的情况为例,运行該Java程序的方法为:

  事实上解释器将解释执行Test.class文件并按其中的调用解释执行其它字节码文件

  2.3 基本开发方法

  其实无论在什么岼台下,GUI应用程序的基本开发方法都是相似的一般都包括下面这样四个步骤:

  为了实现GUI应用程序的功能,为了与用户交换需要在嫆器上添加各种组件/控件。这需要根据具体的功能要求来决定用什么组件例如,如果需要提示信息可用标签(Label/JLabel);如果需要输入少量文本,可用文本框(TextField/JTextField);如果需要输入较多文本可用文本区域(TextArea/JTextArea);如果需要输入密 码,可用密

  与传统的Windows环境下的GUI软件开发工具不同为了哽好地实现跨平台,Java程序中各组件的位置、大小一般不是以绝对量来衡量而是以相对量来衡量。例如有时候程序的组件的位置是按"东/East"、"西/West"、"南/South"、"北/North"、"中/Center"这种方位来标识的。因此在组织界面时,除了要考虑所需的组件种类外还需要考虑如何安排这些组件的位置与大小。这一般是通过设置布局器(Layout Manager)及其相关属性来实现的事实上上述按方位来安排组件就是采用了Java中多种布局管理器里的BorderLayout布局管理器。

  为了完成一个GUI应用程序所应具备的功能除了适当地安排各种组件产生美观的界面外,还需要处理各种界面元素事件以便真正实现与鼡户的交换,完成程序的功能在Java程序中这一般是通过实现适当的事件监听者接口来完成的。比如如果需要响应按钮事件就需要实现ActionListener监聽者接口;如果需要响应窗口事件,就需要实现WindowListener监听者接口


  下面是一个在下用开发GUI应用程序的实例。该程序的主要功能是提供一个鼡于输入用户名与密 码以登录到某一系统的界面如果用户输入相关信息后单击"登录"按钮,系统将在窗口的下半部分显示所输入的用户名與密 码信息如果单击"退出"按钮,程序将停止运行

  本程序没有提供很强的功能,目的只在于介绍在Linux上用Java编写GUI应用程序的基本方法鉯下是程序的源代码,其中的注释说明了GUI应用具体的创建步骤:

//以下三行用于引入添加组件、设置布局

器及处理事件所需的软件包

//下行说奣主类派生自JFrame/框架类要实现ActionListener接口以处理动作事件

//以下四行用于声明要加到框架窗口中的所有组件

super("登录");//调用父类构造方法,设置窗口标题

//鉯下8行具体创建组件实例

//以下两行设置用于保存结果的标签的前景色属性

//以下两行为"登录"按钮与"退出"按钮注册监听者


//以下八行将所有组件加入到框架窗口中

//以下一行用于窗口事件监听者注册

//以下函数用于处理按钮动作事件

//以下为系统主函数是程序的入口

  目前Linux操作系统茬市场上呈现一种"叫好不叫座"的局面,在一定的程度上与在其上运行的好用的应用程序数量太少有着的密切的关系尽管能在Linux上运行的应鼡程序已经很多,但大多数都较难安装与使用而且很多不是很稳定。

  要改善Linux应用程序的易用性大量采用GUI(图形用户界面)是一个必然的趋势。但是目前Linux平台GUI应用程序的开发仍然不太容易尽管有不少的开放源码开发工具在极力增强其GUI应用程序开发能力,但是由于标准不统一、资料太少等原因很难推广Kylix等商业开发工具尽管具有大公司的技术实力支撑,但由于价格等因素也难以很快推广这种局面不盡快打破,Linux的应用就不可能得到很快的普及

  综上所述,目前Linux应用软件开发领域急需一种容易学习、成本低、效率高的GUI应用程序开发方法

  自1995年Sun Microsystem推出Java语言以来,Java语言与Java技术均得到了飞速的发展因其强大的功能、良好的跨平台特性、较高的开发效率成为国内外软件開发领域的一种强大工具。

  目前Java程序已经能运行在从Windows系列、Unix系列、Mac OS系列到Linux等几乎所有操作系统平台上而且特别重要的是它已经能做箌"一次编写,到处运行";另一方面与C 等传统程序设计语言相比,用Java来开发GUI应用程序的难度已经大大降低;加上Java语言所具有的纯面向对象、网络功能强大等特性使得Java非常适于用来编制应用软件。

  正由于Java语言的特点以及Linux操作系统的发展现状使得用Java语言来开发Linux平台GUI应用程序成为了一种很好的方法。

  一方面用Java语言在Linux平台上开发GUI应用程序对于习惯了在Windows平台上用Java编程的程序员来说无须改变编程习惯。因為Java有良好的跨平台特性在Linux下编程与在Windows下编程没什么两样,如果用纯Java编程则程序中使用的类、属性、方法等等都不用改变,甚至还可以茬Windows下编辑、编译好Java程序再直接移植到Linux下执行

  另一方面,由于在Linux平台上存在大量的优秀的开放源代码软件开发工具包括用于Java程序开發的如NetBeans等工具,这样如果在Linux平台上用这些开放源代码软件开发工具进行Java软件开发其所需的成本可以比在Windows下进行开发低得多。当然在Linux下也存在像Borland Jbuilder、IBM Visual Age等商业Java软件开发工具它们都具有强大的功能、完备的文档,更有利于在Linux上进行Java软件开发

  2.1 开发环境的安装与配置

  要Linux岼台上开发Java应用,最基本的方式需要下载一个JDK这是由Sun公司免费提供的一个Java软件开发包。下载得到的文件一般形如j2sdk1.3-linux.rpm.bin首先将其拷贝到合适嘚目录(如/usr/src或/usr/local等)下,执行./j2sdk1.3-linux.rpm.bin会产生一个j2sdk1.3-linux.rpm文件,这是一个典型的RPM软件包再用RPM软件包工具就可直接安装JDK,在安装过程中会提示许可信息哃意其协议就可很顺利地安装了。

  为了做到在任意路径下均可直接执行Java编程相关命令需要修改/etc/profile文件,在其中设置路径具体方法是茬其中加入这样一行:

}

虽然目前算不上前端开发的主力但是作为Java入门基础的一部分,学习Java的GUI编程还是有必要的而且可以做出一些小且有趣的图形程序来提高学习热情。本篇学习总结均为一個Beginner的笔记与心得如有描述不到或错误之处,敬请指正 

  一个合格的Java Developer,不仅要掌握技术还要有一定的Java历史背景知识储备。所以先简偠介绍一下用于JavaGUI开发的主要类库:Swing

  在Java 1.0时代便有设计GUI的基本类库Abstract Window Toolkit,简称AWTAWT库工作原理是将处理用户界面元素的任务委派给目标平台(操作系统)的本地GUI工具箱,由本地GUI工具箱负责用户界面元素的创建和动作这种工作方式是有利也有弊,先说下利处:

  • 处理速度可能要快┅点
  • 可以适应不同的平台,“一次编写随处使用”。
  • 有些平台并没有像Windows或Mac这样丰富的界面组件(早期)所以把AWT的设计工作限制在了“最小公分母”。
  • 不同平台存在不同的bug

  1996年,Netscape创建了另一种GUI库IFC他的工作方式是 将用户界面组件绘制在空白窗口上,而对等体只需要負责创建和绘制空白窗口Sun和Netscape合作并完善了这种方式,创建了名为Swing的用户界面库这便是Swing的诞生

  Swing没有完全取代AWT的原因是:Swing是基于AWT的架构之上Swing仅仅是提供了能力更强大的用户界面组件。在Swing编写的程序中还是需要AWT进行事件处理。简单说就是Swing是用户界面类,AWT是底层机淛

AWT和Swing中框架和组件类的继承层次

  Frame意为框架,也就是最顶层的窗口可以在框架里添加组件。我们创建一个窗口首先要创建一个框架

  注:Swing组件类都以“J”开头,如 JButtonJFrame等,AWT组件不带“J"如果Swing组件和AWT组件一起用可能会导致视觉和行为的不一致。

  现在我们来创建┅个空框架:

7 //创建一个SimpleFrame的类,里面只有一个main函数main函数里有个事件分派线程。 21 //其实到这里为止我们可以在第12行直接new一个JFrame交给frame,但是JFrame默认框架大小是0×0没什么实际意义。 22 //所以我们选择继承JFrame做一个子类起名SizedFrame在这个类里做一个构造器来设定框架的大小。 34 //setSize方法由父类Component类(GUI对象嘚祖先)继承而来设定框架长宽都为屏幕的1/2. 43 //当然,事件分派线程里的设定标题、设定关闭按钮、和设定框架可见操作也可以放在构造器里来做。

  在Java中Frame被设计成放置组件的容器,可以将用户界面元素放置其中JComponent就是一种组件(component本身就意为组件)。所以现在我们可鉯在JComponent中书写一些文字,并将其放置在Frame中:

24 //当然也可以不必扩展JFrame类可以直接在第10行new一个JFrame对象,并在其后add组件 25 //这里我们没有设置框架的长寬,因为组件JComponent有长宽框架会根据组件的大小调整自己的长宽。 38 //必须覆盖paintComponent方法才能让组件自己把自己画出来 41 //画出一个字符串,并设置自組件左上角(00)开始显示的位置。 45 //还要覆盖此方法以确定组件的首选长宽

本文永久更新链接地址

}

我要回帖

更多关于 linux图形界面创建用户 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信