做女装的网站,品牌加盟最好的网站建设,广州做网站市场,网站建设需求调研问卷Java图形化界面设计之容器#xff08;JFrame#xff09;详解
Java图形化界面设计——容器#xff08;JFrame#xff09;
程序是为了方便用户使用的#xff0c;因此实现图形化界面的程序编写是所有编程语言发展的必然趋势#xff0c;在命令提示符下运行的程序可以让我们…Java图形化界面设计之容器JFrame详解
Java图形化界面设计——容器JFrame
程序是为了方便用户使用的因此实现图形化界面的程序编写是所有编程语言发展的必然趋势在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构现在就进入java图形化界面编程。
一、Java基本类JFC
Java基本类(“JavaFoundationClasses”JFC)由一些软件包组成。这些软件包主要包括下面一些应用程序接口(API)
·抽象窗口工具集(AWT)(1.1及以上版本)。
·Swing构件。
·Java2D应用程序接口(2DAPI)。
·兼容程序接口。
上面列出的这些应用程序接口可难会出现在多个软件包中。例如2DAPI在Java.awt和Java.awt.image软件包中都存在虽然像Java.awt.geom等一些特殊的软件包也支持2DAPI但是大量的2DAPI类都存在于Java.awt软件包中。
AWT(1.1及以上版本)是JFC的核心。AWT为JFC的构成提供了以下基本结构
·代理事件模型。
·轻量构件。
·剪贴板和数据传输。
·打印和无鼠标操作。
1、AWTAbstractWindowToolkitAWT抽象窗口工具包
AWT是比较旧的双介面函式库它依然高度倚赖各作业平台自身所具备的绘图功效机能且用一个比包容程式Wrapper还小的设计还去除、吸收各作业平台间的绘图功能机能差异以致Java程式在跨平台移携后的绘图呈现不够一致这使得AWT遭受到众多的批评。这意味着AWT的Widget倚赖作业平台自身原有的Widget功效机能程式设计师在开发撰写时必须去了解各作业平台在Widget方面的差异性如此便偏离了Java程式语言最初的宗旨跨平台一致性。
AWT由java.awt包提供其提供了支持GUI设计的类和接口而又AWT提供的组建一般称之为重量级组件其是由本地方法来实现其功能的。AWT的特点
lAWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系
lAWT通过牺牲功能来实现其平台无关性
lAWT不能满足图形化用户界面发展的需要
2、Swing包
为了解决AWT组件的缺陷特别是跨平台的问题在JDK1.2版本后提供了新的Swing包有javax.swing提供Swing是在AWT的基础上构建的一套新的图形界面组件所有组建均是由java书写具有良好的跨平台性由于Swing没有使用本地方法实现图形功能因此提出把Swing组件称之为轻量级组件。
注意Swing组建是在AWT基础上建立的而不是替代AWT的AWT是根基Swing是发展。
Swing组件几乎都是轻量组件那些顶层容器窗体小应用程序、窗口和对话框除外。因为轻量组件是在其容器的窗口中绘制的而不是在自己的窗口中绘制的所以轻量组件最终必须包含在一个重量容器中。因此Swing的窗体、小应用程序、窗口和对话框都必须是重量组件以便提供一个可以在其绘制Swing轻量组件的窗口。
Swing包括250多个类其中有些是UI组件有些是支持类。为了把UI组件和支持类区分开Swing组件的名字以J开头。表1-1列出了Swing提供的J组件。用斜体字表示的组件是AWT组件的替代组件。
表1-1SwingUI组件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 组件类 描述 ───────────────────────────────── JApplet Java.applet.Applet类的扩展它含有JRootPane的一个实例 JButton 能显示文本和图形的按钮它是AWT按钮组件的替代组件 JCheckBox 能显示文本和图形的复选框它是AWT选择组件的替代组件 JCheckBoxMenuItem 一个复选框菜单项它是AWT的复选框菜单项组件的替代组件 JComboBox 带下拉列表的文本框它是AWT选择组件的替代组件 JComponent 所有轻量J组件的基类 JDesktopPane 内部窗体的容器 JDialog Swing对话框的基类它扩展了AWT Dialot类 JEditorPane 用于编辑文本的文本窗格 JFrame 扩展java.awt.Frame的外部窗体 JInternalFrame 在JDesktopPane中出现的内部窗体 JLabel 可显示文本和图标的标签它是AWT标签组件的替代组件 JLayeredPane 能够在不同层上显示组件的容器 JList 显示选项列表的组件它是AWT列表组件的替代组件 JMenu 菜单条中显示的一个菜单它是AWT菜单组件的替代组件 JMenuBar 用于显示菜单的菜单条它是AWT菜单条组件的替代组件 JMenuItem 菜单项它是AWT菜单项组件的替代组件 JOptionPane 显示标准的对话框如消息和问题对话框 JPanel 通用容器它是AWT面板和画布组件的替代组件 JPasswordfield JTextField的扩展使输入的字符不可见 JPopupMenu 弹出式菜单它是AWT弹出式菜单组件的替代组件 JProgressBar 进度指示器 JRadioButton 单选按钮它是AWT复选框组件的替代组件 JRootPane 顶层容器它包含一个玻璃窗格一个层窗格一个内容窗格和一个可选的菜单条 JScrollBar 滚动条它是AWT滚动条组件的替代组件 JScrollPane 滚动窗格它是AWT滚动窗格组件的替代组件 JSeparator 水平或垂直分隔条 JSlider 滑杆 JSplitPane 有两个分隔区的容器这两个分隔区可以水平排列或者垂直排列且分隔区的大小能自动调整 JTabbedPane 带选项卡的窗格 JTable 表格 JTableHeader 表格头 JTextArea 用于输入多行文本的文本域它是AWT文本域组件的替代组件 JTestComponent 文本组件的基类它替代AWT的TextComponent类 JTextField 单行文本域它替代AWT的单行文本域组件 JTextPane 简单的文本编辑器 JToggleButton 两种状态的按钮它是JCheckBox和JRadioButton组件的基类 JToolBar 工具条 JToolTip 当光标停留在一个组件上时该组件上显示的一行文字 JTree 用于按钮层次组织数据的结构控件 JViesport 用于浏览可滚动组件的视口 JWindow 外部窗口它是java.awt.Window的扩展 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 注斜体字表示的是AWT的替代组件
二、AWT和Swing的区别
AWT是AbstractWindowToolKit(抽象窗口工具包)的缩写这个工具包提供了一套与本地图形界面进行交互的接口。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系我们把它称为peers。也就是说当我们利用AWT来构件图形用户界面的时候我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的一次编译到处运行的概念AWT不得不通过牺牲功能来实现其平台无关性也就是说AWT所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT是依靠本地方法来实现其功能的我们通常把AWT控件称为重量级控件。
Swing是在AWT的基础上构建的一套新的图形界面系统它提供了AWT所能够提供的所有功能并且用纯粹的Java代码对AWT的功能进行了大幅度的扩充。例如说并不是所有的操作系统都提供了对树形控件的支持Swing利用了AWT中所提供的基本作图方法对树形控件进行模拟。由于Swing控件是用100%的Java代码来实现的因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing中没有使用本地方法来实现图形功能我们通常把Swing控件称为轻量级控件。
AWT和Swing之间的基本区别AWT是基于本地方法的C/C程序其运行速度比较快Swing是基于AWT的Java程序其运行速度比较慢。对于一个嵌入式应用来说目标平台的硬件资源往往非常有限而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下简单而高效的AWT当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中硬件资源对应用程序所造成的限制往往不是项目中的关键因素所以在标准版的Java中则提倡使用Swing也就是通过牺牲速度来实现应用程序的功能。
简要的讲:
AWT是抽象窗口组件工具包是java最早的用于编写图形节目应用程序的开发包。
Swing是为了解决AWT存在的问题而新开发的包它以AWT为基础的。
三、Swing基本框架 上图列举了AWT和Swing的关系也可以看出Swing是继承自AWT的。本文主要利用Swing来设计图形化界面程序。
四、图形化设计步骤
图形化界面程序大家都使用过一般使用一个程序过程是打开一个程序出现一个窗口或对话框其中一般有菜单、工具栏、文本框、按钮、单选框、复选框等控件组件也就是控件用户录入相关数据点按相关菜单、按钮程序对数据进行相关处理并将处理后的数据显示或者保存起来最后关闭程序。
用java编程的相关设计步骤来分解上面的的程序运行过程如下图所示 1、创建顶层容器
对应于程序的初始显现窗口窗口中放入其它菜单、工具栏、文本框、按钮等组件
顶层容器图形化界面显示的基础其它所有的组件控件都是直接或间接显示在顶层容器中的。在java中顶层容器有三种分别是JFrame框架窗口即通常的窗口、JDialog对话框、JApplet用于设计嵌入在网页中的java小程序。
2、创建中间容器、组件
对应于程序中出现的菜单、工具栏中间容器、文本框、按钮、单选框、复选框等控件。
有很多Swing组件可以使用见前面的SwingUI组件表。
3、将组件加入容器
在java中创建组件后还需要将组件放入相应的容器才能在顶层容器如窗口中显示出组件。
4、设置容器内组件的位置
组件添加到容器中还必须设置好组件的显示位置一般有两种方法来设置组建的显示位置一是按照与容器的相对距离以像素为单位精确固定控件的位置二是用布局管理器来管理组件在容器内的位置。
5、处理组件所产生的事件
即用户执行选择菜单、单击按钮等操作时就要执行相应的命令进行相关的程序处理这就需要设置组件的事件。
五、组件容器的使用
Java中组件容器包含顶层容器和中间容器。
在java中顶层容器有三种分别是JFrame框架窗口即通常的窗口、JDialog对话框、JApplet用于设计嵌入在网页中的java小程序顶层容器是容纳其它组件的基础即设计图形化程序必须要有顶层容器。
Java中间容器是可以包含其它相应组件的容器但是中间容器和组件一样不能单独存在必须依附于顶层容器。
常见的中间容器有
JPanel最灵活、最常用的中间容器。
JScrollPane与JPanel类似但还可在大的组件或可扩展组件周围提供滚动条。
JTabbedPane包含多个组件但一次只显示一个组件。用户可在组件之间方便地切换。
JToolBar按行或列排列一组组件通常是按钮。
1、JFrame框架窗口的使用 以上是JFrame的常用方法即说明下面举例说明。
实例1直接定义Jframe类的对象创建一个窗口
// JFrameDemo1.java
import javax.swing.*;
//使用Swing类必须引入Swing包
public class JFrameDemo1{public staticvoid main( String args[]) {//定义一个窗体对象f窗体名称为一个简单窗口 Jframe f new JFrame(一个简单窗口);/*设置窗体左上角与显示屏左上角的坐标
离显示屏上边缘300像素离显示屏左边缘300像素 */f.setLocation(300, 300);//f.setLocationRelativeTo(null);本语句实现窗口居屏幕中央f.setSize(300,200);//设置窗体的大小为300*200像素大小f.setResizable(false);//设置窗体是否可以调整大小参数为布尔值//设置窗体可见没有该语句窗体将不可见此语句必须有否则没有界面就没有如何意义了f.setVisible( true);//用户单击窗口的关闭按钮时程序执行的操作f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);}
}程序运行结果如下图所示 可以根据程序代码的注释依次修改相应的方法参数查看效果。
setDefaultCloseOperation(intoperation)设置用户在此窗体上发起close时默认执行的操作。方法中的参数解释如下
l为“0”或DO_NOTHING_ON_CLOSE
在WindowConstants中定义不执行任何操作要求程序在已注册的WindowListener对象的windowClosing方法中处理该操作。
比如实例程序代码中更改为f.setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果可以发现窗口无法关闭下面是相同用法不再解释了。
l为“1”或HIDE_ON_CLOSE
调用任意已注册的WindowListener对象后自动隐藏该窗体。此时没有关闭程序只是将程序界面隐藏了。
可以打开任务管理器可以看到一个叫“java.exe”的进程如果调试运行了多个java程序则会看到多个“java.exe”的进程如果此时用EditPlus测试程序会发现当单击窗口的关闭按钮关闭窗口后却无法再次对程序进行调试因为程序线程没有关闭在任务管理器中关闭java.exe如果有多个“java.exe”的进程则先都关闭掉再来测试该问题基础后EditPlus才可以重新编译改程序。
l为“2”或DISPOSE_ON_CLOSE
调用任意已注册WindowListener的对象后自动隐藏并释放该窗体。但继续运行应用程序释放了窗体中占用的资源。
l为“3”EXIT_ON_CLOSE在JFrame中定义使用Systemexit方法退出应用程序。仅在应用程序中使用。结束了应用程序。
默认情况下该值被设置为HIDE_ON_CLOSE。
当注释掉实例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);语句时起到的效果和f.setDefaultCloseOperation(f.HIDE_ON_CLOSE);或者f.setDefaultCloseOperation(1);一样。
实例2创建类继承JFrame类创建一个窗口
// JFrameDemo2.java
importjavax.swing.*;
//创建子类MyFrame继承父类JFrame
class MyFrameextends JFrame{//定义构造函数带有四个参数用于设置窗口位置和大小MyFrame(int x,int y,int h,int w){super(一个简单窗口);//重写父类方法为窗口定义标题/*以下的方法调用前面没有添加对象名也不可能添加要创建的对象名称是什么都不知道也就不可能添加。但是创建对象后对象自动获取这些初始值。*/setLocation(x,y);setSize(h,w);setResizable(false);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}
}
publicclass JFrameDemo2{public static void main( String args[]) {//实例化类对象提示设置参数MyFrame f new MyFrame(300,300,300,200);}
}上面的例子也可以不使用构造函数可以和实例一方式一样代码可以改为如下模式。
实例3一个简单窗口
// JframeDemo3.java
importjavax.swing.*;
class MyFrameextends JFrame{MyFrame(){}
}
publicclass JframeDemo3{public static void main( String args[]) {MyFrame f new MyFrame();f.setTitle(一个简单窗口);f.setLocationRelativeTo(null);f.setSize(300,200);f.setResizable(false);f.setVisible( true);f.setDefaultCloseOperation(3);}
}总结
以上就是本文关于Java图形化界面设计之容器JFrame详解的全部内容。许多人说Java图形化设计不重要用的人也不多事实上也确实如此。不过既然它如此简单而且看起来挺有趣的抽时间学一下也无妨。