swing 组件和容器——java swing 组件技术(中)
- 格式:docx
- 大小:222.34 KB
- 文档页数:14
JavaSESwing程序结构、组件分类及基本规则{相关信息}1. 程序结构Swing 的程序设计⼀般可按照以下流程进⾏:(1)通过 import 引⼊ swing 包。
(2)设置 GUI 的“外观界⾯风格”。
(3)创建顶层容器。
(4)创建按钮和标签等组件。
(5)将组件添加到顶层容器。
(6)在组件周围添加边界。
(7)进⾏事件处理。
2. 组件分类Jcomponent 类派⽣于 Container 类。
并不是 Swing 的所有组件都继承了 JComponent 类,凡是派⽣于 Container 类的组件都可以作为容器使⽤。
Swing 组件从功能上可分为顶层容器、中间容器、特殊容器、基本控件、信息显⽰组件和编辑信息组件。
顶层容器:Jframe、Japplet、Jdialog、JWindow。
中间容器:Jpanel、JscrollPane、JsplitPane、JToolBar。
特殊容器:GUI 中特殊作⽤的中间层,例如 JinternalFrame、JlayeredPane、JRootPane。
基本控件:⼈机交互的基本组件,如 Jbutton、JcomboBox、Jlist、Jmenu、Jslider、JtextField。
信息显⽰组件:组件仅仅为显⽰信息,但不能编辑,如 Jlabel、JprogressBar、ToolTip。
编辑信息组件:向⽤户显⽰可被编辑信息的组件,例如 JcolorChooser、JfileChoose、JfileChooser、Jtable、JtextArea。
另外,JComponent 类的⼀些特殊功能包括边框设置、双缓冲区、提⽰信息、键盘导航和⽀持布局。
边框设置:使⽤ setBorder()⽅法设置组件外围边框,如果不设置边框就会为组件的外围留出空⽩。
双缓冲区:为了改善组件的显⽰效果,采⽤双缓冲技术。
JComponent 组件默认是双缓冲的,不必要⾃⼰写代码,可以通过setDoubleBuffered(false)关闭双缓冲区。
Java的Swing编程中使⽤SwingWorker线程模式及顶层容器使⽤SwingWorker线程模式谨慎地使⽤并发机制对Swing开发⼈员来说⾮常重要。
⼀个好的Swing程序使⽤并发机制来创建不会失去响应的⽤户接⼝-不管是什么样的⽤户交互,程序总能够对其给出响应。
创建⼀个有响应的程序,开发⼈员必须学会如何在Swing框架中使⽤多线程。
⼀个Swing开发⼈员将会与下⾯⼏类线程打交道:(1)Initial threads(初始线程),此类线程将执⾏初始化应⽤代码。
(2)The event dispatch thread(事件派发线程),所有的事件处理代码在这⾥执⾏。
⼤多数与Swing框架交互的代码也必须执⾏这个线程。
(3)Worker threads(⼯作线程),也称作background threads(后台线程),此类线程将执⾏所有消耗时间的任务。
开发⼈员不需要在代码中显式的创建这些线程:它们是由runtime或Swing框架提供的。
开发⼈员的⼯作就是利⽤这些线程来创建具有响应的,持久的Swing程序。
如同所有其他在Java平台上运⾏的程序,⼀个Swing程序可以创建额外的线程和线程池,这需要使⽤本⽂即将介绍的⽅法。
本⽂将介绍以上这三种线程。
⼯作线程的讨论将涉及到使⽤javax.swing.SwingWorker类。
这个类有许多有⽤的特性,包括在⼯作线程任务与其他线程任务之间的通信与协作。
1.初始线程每个程序都会在应⽤逻辑开始时⽣成⼀系列的线程。
在标准的程序中,只有⼀个这样的线程:这个线程将调⽤程序主类中的main⽅法。
在applet中初始线程是applet对象的构造⼦,它将调⽤init⽅法;这些actions可能在⼀个单⼀的线程中执⾏,或在两个或三个不同的线程中,这些都依据Java平台的具体实现。
在本⽂中,我们称这类线程为初始线程(initial threads)。
在Swing程序中,初始线程没有很多事情要做。
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。
遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。
因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。
同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。
Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。
此外,和原来的AWT相比,Swing 中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。
JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。
实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT 中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。
并且,Swing 仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签(JLabel)标签(JLabel)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。
一抛砖引玉本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。
并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。
你能举一返三是作者最开心的事情。
小程序演示了Java Swing 大部分组件。
最后附上了全部代码及详细的注释说明。
希望本文能对大家学习Java有所帮助。
随着Java风潮席卷国内,学习Java的方法和路径越来越多。
而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。
然而所有的这些都或多或少的离不开J2SE。
万丈高楼平地起。
J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。
而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。
而不像后台编程做完了都感受不到效果。
而好的界面也是你测试你其他程序的基础。
界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。
即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。
如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。
Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。
下面我们就以Swing为基础来说说整个Java的界面设计。
二感受效果在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。
如下图所示,这就是我们设计的界面,它包括了Swing中大部分常用的组件。
有些功能界面上反映不出来,大家可尝试编译源代码点南击各个部分,看看它们的响应事件。
swing 组价和容器——java swing 组件和技术(中)一、swing组件和容器概览1.顶层容器(JFrame,JDialog,JApplet)JFrame—框架,主要用来设计应用程序的图像界面JDialog—对话框,通常用来设计具有依赖关系的窗口JApplet—小应用程序,主要用来设计嵌入网页中运行的java程序2.一般容器普通容器(JPanel、JScrollPane、JToolbar、JSplitPane、JTabbedPane) JPanel—面板,通常只有背景颜色的普通容器JScrollPane—滚动窗格,具有滚动条JToolbar—工具条,通常将多个组件排成一排或者一列JSplitPane—分裂窗格,用来装两个组件的容器JTabbedPane—选项卡窗格,允许多个组件共享相同的界面空间专用容器(JLayeredPane、JRootPane 、JInternalFrame)JLayeredPane—分层窗格,给窗格增加了深度的概念JRootPane—根窗格,一般是自动创建的容器JInternalFrame—内部窗格,可以在一个窗口内显示若干个类似于框架的窗口3.基本控件(JButton、JCombobox、JList、JMenu、JSlider、JTextField)4.不可编辑信息组件(JLabel、JProgressBar、JToolTip等)5.可编辑组件(JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等)二、常用的swing组件和容器1.JFrame✧顶层容器,默认不可见;默认布局方式为BorderLayout✧构造函数:●JFrame()●JFrame(String title)//title 为框架的标题内容✧JFrame常用方法●setDefaultCloseOperation(int operation)—设置关闭框架的行为参数operation一般是JFrame. EXIT_ON_CLOSE,表示关闭框架时,则退出程序●setSize(int width, int height)—设置框架的大小●setVisible(boolean b)—设置框架是否可见,默认为false●getContentPane()—获取顶层容器的内容面板●add(Component comp)—往内容面板添加组件●setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutexample:JDialog 和JOptionPane的demo2.JDialog 和JOptionPanea)JDialog✧在已有的窗口上创建对话框,可以使用此类创建自定义的对话框✧构造函数:⏹JDialog(Dialog owner, String title, boolean modal)⏹JDialog(Frame owner, String title, boolean modal)owner—指定对话框的父窗口title—对话框的标题modal—对话框的模式(true为“有模式对话框”,false为“无模式对话框”✧JDialog常用方法⏹setSize(int width, int height)—设置对话框的大小⏹getContentPane()—获取顶层容器的内容面板⏹add(Component comp)—往内容面板添加组件⏹setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutb)JOptionPane✧提供一些现成的、各种常用的标准对话框(有模式的对话框)✧JOptionPane类里静态方法众多,但几乎所有静态方法都遵循showXxxDialog()的形式,如下:这四种方法的参数都遵循一致的模式:①ParentComponent:指示对话框的父窗口对象,一般为当前窗口。
也可以为null即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。
②message:指示要在对话框内显示的描述性的文字③String title:窗口标题④Component:在对话框内要显示的组件(如按钮)⑤Icon:在对话框内要显示的图标⑥messageType:定义message 的样式,一般可以为如下的值⏹ERROR_MESSAGE⏹INFORMATION_MESSAGE⏹WARNING_MESSAGE⏹QUESTION_MESSAGE⏹PLAIN_MESSAGE⑦optionType:定义在对话框的底部显示的选项按钮的集合。
一般可以为⏹DEFAULT_OPTION⏹YES_NO_OPTION⏹YES_NO_CANCEL_OPTION⏹OK_CANCEL_OPTION。
✧当showXxxDialog 方法返回整数时,可能的值为:⏹YES_OPTION⏹NO_OPTION⏹CANCEL_OPTION⏹OK_OPTION⏹CLOSED_OPTION3.JLabel✧构造函数;⏹JLabel()⏹JLabel(String text)⏹JLabel(Icon image)⏹JLabel(String text, Icon icon, int horizontalAlignment)其中参数text为JLabel的文字信息,image为JLabel的图标,horizontalAlignment为文字与图标在水平方向上的对齐方式,常见的取值有常量 JLabel.LEFT(左对齐),JLabel. CENTER(中对齐),JLabel. RIGHT(右对齐),✧JLabel常用方法:⏹setText(String text)—设置文字信息⏹setIcon(Icon image)—设置JLabel的图标⏹setHorizontalAlignment(int alignment)—设置文字与图标在水平方向的对齐方式⏹setVerticalAlignment(int alignment)—设置文字与图标在竖直方向的对齐方式⏹setToolTipText(String text)—在JLabel上停留时出现的提示信息4.JTextField 和JPasswordField✧都是用来编辑单行文本,JTextField可以直接看到输入的字符,JPasswordField将输入的字符表示成”*”✧构造函数:参数text指定文本编辑框显示的初始文本,columns为文本编辑框的宽度(大于0)。
✧常用方法:getText()—获取编辑框的文本信息(String 类型)setText(String text)—设置文本信息setEditable(boolean b)—设置是否可编辑5.JButton、JCheckBox(复选框)和JRadioButton(单选按钮)✧触击式组件(单击这三个组件,都能触发特定的的事件。
)JButton——命令式事件·JCheckBox、JRadioButton—选择状态发生变化✧构造函数:JButton()JButton(Icon icon)JButton(String text)JButton(Stringtext, Iconicon)参数text为指定组件显示的文本信息,icon为指定组件的图标,selected指定组件是否被选中✧JCheckBox、JRadioButton常用方法:setSelected(boolean b)—设置组件的选中状态isSelected()—判断组件时否被选中✧与ButtonGroup对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
ButtonGroup提供的一个空的构造方法,使用成员方法add(AbstractButton b)添加单选按钮(JRadioButton是AbstractButton的子类)✧如果需要把多个JRadioButton排成一排或者一列,可以创建一个布局为GridLayout或者BoxLayout的JPanel。
如:JPaneljpanel = new JPanel(new GridLayout(0,1));//排成一列jpanel.add(JRadioButton);6.JComboBox(组合框),JList,JTextArea和JScrollPane✧用于显示多行文本的组件(一)J ComboBox(组合框)✧构造函数:JComboBox(Object[] items)参数items为组合框的各个选项✧常用方法:setEditable(booleanaFlag)—设置组合框是否可以自行输入一行文本信息,默认为false。
当为false时,只能选择组合框中的某个选项setMaximumRowCount(int count)—设置显示的最大行数setSelectedIndex(int anIndex)—选择索引第anIndex+1 处的选项getSelectedIndex()—返回列表中与给定项匹配的第一个选项的下标值getSelectedItem()—返回当前所选项。
getSelectedObjects()—返回包含所选项的数组。
(二)J List(列表框)✧构造函数:JList(Object[] listData)参数listData为列表框的各个选项✧常用方法:setSelectionMode(int selectionMode)—设置列表的选择模式。
selectionMode常为以下常数:◆ListSelectionModel.SINGLE_SELECTION - 一次只能选择一个列表选项◆ListSelectionModel.SINGLE_INTERVAL_SELECTION - 一次只能选择一个连续间隔◆ListSelectionModel.MULTIPLE_INTERVAL_SELECTION –一次可选择一个或多个选项。
此模式是默认设置。
setSelectedIndex(int index)—设置被选中的选项getSelectedIndex()—返回最小的选择单元的索引(三)J TextArea (文本区域)✧构造函数;JTextArea(String text, int rows, int columns)构造具有指定文本text、rows行columns列的TextArea7.菜单编写✧相关的类:通过JMenuBar类(利用setJMenuBar()方法加入窗口中)JMenu(级联)JMenuItem(菜单项目)JCheckBoxMenuItem(选择性的菜单项目)、JRadioButtonMenuItem(选择性的菜单项目(圆点))。