《Java应用程序设计(Swing GUI).ppt》由会员分享,可在线阅读,更多相关《Java应用程序设计(Swing GUI).ppt(49页珍藏版)》请在三一办公上搜索。
1、Java应用程序设计,第8章 Swing组件参考教材:Java实用教程,肖磊,人民邮电出版社,8.1 Swing概述,Swing是基于AWT开发的,AWT的组件全部是重量级的,而相应的组件在Swing中全部都改成轻量级的;Swing组件的跨平台性比较好,而且增加了一些组件;Swing是JFC(Java Foundation Class)的一部分,其余5个部分是:AWT,辅助功能API,2D API和对拖放功能增强的支持;,Swing中的每一个轻量级组件必须出现在重量级容器中,所以Swing的小应用程序JApplet、窗体、窗口、对话框都必须是重量组件,以提供绘制Swing轻量级组件的窗口;Sw
2、ing组件由40多个,一部分为AWT组件的替代品,另一部分是提供给用户开发图形用户界面增添的组件;,8.1 Swing概述,8.2 创建窗体,利用JFrame类来创建窗体;setTitle(String title);/设置窗体标题;setBounds(int x,int y,int width,int height);/设置窗体的位置和大小setDefaultCloseOperation(int operation);/设置关闭按钮的动作operation为JFrame类中用来设置关闭按钮动作的静态常量,见下页表;,8.2 创建窗体,8.2 创建窗体,在利用JFrame类创建窗体时,必须在最
3、后通过该类的setVisible(true);将该窗体设置为可见,默认为不可见;在setVisible(true)之后的对窗体设置将无效;例子:MyFirstFrame.java,8.3 常用组件,8.3.1 JLable标签组件通过JLable类创建标签组件;setText(String text);/设置标签设置的文本setFont(Font font);/设置文本字体及大小;setHorizontalAlignment(int alignment);/设置文本的显示位置,该参数可从下表中选择,8.3.1 JLabel标签的创建,JLabel类用于设置标签内容水平位置的常量,setIcon
4、(Icon icon);/设置标签中可显示的图片setHorizontalTextPosition(int textPosition);/设置文字相对于图像在水平方向上的位置,可从下表中选择,例子:LabelDemo.java,8.3.2 JButton组件,通过JButton类来创建按钮组件;setText(String text);/设置按钮的标签文本setIcon(Icon defaultIcon);/设置按钮在默认状态下显示的图片;setRolloverIcon(Icon rolloverIcon);/设置当光标移到按钮上时显示的图片;setPressedIcon(Icon press
5、edIcon);/设置按钮被按下时显示的图片;,8.3.2 JButton组件,setMargin(Insets m);/将按钮边框和标签四周的间隔均设置为0;Insets类的构造方法:Insets(int top,int left,int bottom,int right);/4个整形参数依次为:标签上方,左侧,下方和右侧的间隔;setContentAreaFilled(boolean b);/设置为不绘制按钮的内容区域,即设置按钮的背景为透明,当参数为false时为不绘制,默认为true;setBorderPainted(boolean b);/设置不绘制按钮的边框,默认为true,表示绘
6、制;,8.3.3 JRadioButton组件,JRadioButton组件实现一个单选按钮,可以单独使用,也可以和ButtonGroup类联合使用;单独使用:该按钮可以被选定和取消;与ButtonGroup联合使用:用户只能选定按钮组中的一个按钮,其取消选定的操作由ButtonGroup类自动完成;,8.3.3 JRadioButton(ButtonGroup),ButtonGroup类用来创建一个按钮组,其作用负责维护本组按钮的“开启”状态,每个组中只能有一个按钮处于“开启”状态;经常与JRadioButton,JRadioButtonMenuItem,JToggleButton类型的按钮
7、一起使用;ButtonGroup类提供的常用方法(下页表),ButtonGroup类提供的常用方法,8.3.3 JRadioButton(常用方法),setText(String text);/设置单选按钮文本;setSelected(boolean b);/设置按钮的状态,true为选中,默认为false;例子:RadioButtonDemo.java,8.3.4 JCheckBox组件,JCheckBox为一复选框,用户可以同时选定多个;setText(String text);/设置复选框的文本setSelected(boolean b);/设置该按钮的选中状态,true表示选中,默认为
8、false;例子:CheckBoxDemo.java,8.3.5 JComboBox组件(选择框),JComboBox组件实现一个选择框,用户可从中选取一项(只能一项);若设置为可编辑状态,则可以在选择框中输入相应的值;创建JComboBox组件的方法(1)JComboBox(Object items)构造函数String idCards=“身份证”,”士兵证”,”驾驶证”;JComboxBox idCardsComboBox=new JComboxBox(idCards);,8.3.5 JComboBox组件,(2)setModel(ComboBoxModel aModel)方法String
9、 idCards=“身份证”,”士兵证”,”驾驶证”;JComboBox icb=new JComboBox();icb.setModel(new DefaultComboBoxModel(idCards);,(3)addItem(Object item);和insertItemAt(Object item,int index);JComboBox icb=new JComboBox();icb.addItem(“士兵证”);icb.addItem(“驾驶证”);icb.insertItemAt(“身份证”,0);,8.3.5 JComboBox组件,8.3.5 JComboBox组件,JCo
10、mboBox类提供的常用方法,例子:ComboBoxDemo.java,8.3.6 JList组件,与JComboBox类似,不同之处是可以多选;初始化列表项Integer months=1,2,3,4,5,6,7,8,9,10,11,12;JList list=new JList(months);JList列表框的3种选取模式,通过ListSelectionModel类中的静态常量进行指定;,8.3.6 JList组件,JList提供的常用方法setSelectedIndex(int index):选中指定索引的一个选项;setSelectedIndices(int indices);选中指
11、定索引的一组选项;setSelectionBackground(Color selectionBackgroud):指定被选项的背景色;setSelectionForeground(Color selectionForeground);指定被选项的前景色;getSelectedIndices():以int形式获得所有被选项的索引值;getSelectedValues():以Object形式获得所有被选项的内容;,8.3.6 JList组件,JList提供的常用方法clearSelection():取消所有被选中的项;isSelectionEmpty():是否有被选中的项,若有,则返回true;
12、isSelectedIndex(int index);指定的索引是否被选中,若选中,则返回true;ensureIndexIsVisible(int index);使指定项在选择窗口中可见;setFixedCellHeight(int height);设置窗口中每个选项的高度;setVisibleRowCount(int count);设置在选择窗口中最多可见的选项数;,8.3.6 JList组件,JList提供的常用方法getPreferredScrollableViewportSize();获得使指定个数选项可见需要的窗口高度;setSelectionModel(int selectMod
13、el);设置选择框的选取模式;例子:ListDemo.java,8.3.7 JTextField组件,创建一个单行文本框;设置默认文本:JTextField tf=new JTextField(“请输入姓名”);JTextField类提供的常用方法setText(String text);/设置文本框的文本getPreferredSize();/获得文本框的首选大小,返回Dimensions类型的对象;scrollRectToVisible(Rectangle r);/向左或向右滚动文本框中的内容;setColumns(int columns);/设置文本框最多可显示的列数;,setFont(
14、Font f);/设置文本框的字体;setScrollOffset(int scrollOffset);/设置文本框的移动偏移量,以像素为单位;setHorizontalAlignment(int alignment);/设置文本框的内容水平对齐方式;由下表的常量指定;,例子:TextFieldDemo.java,8.3.8 JPasswordField组件,创建一个密码框,不显示用户输入的内容,只显示一个特定的字符;JPasswordField类提供的常用方法setEchoChar(char c);/设置回显字符,默认.getEchoChar();/返回char型的回显字符echoCharI
15、sSet();/查看是否设置了回显字符,若已经设置,返回true,否则为false;getPassword();/获得用户输入的文本信息,返回值为char型的数组;例子:PasswordFieldDemo.java,8.3.9 JTextArea组件,创建一多行文本域,可以进行编辑;JTextArea类提供的常用方法;append(String str);/将指定文本添加到文档末尾;insert(String str,int pos);/将指定文本插入到指定位置;replaceRange(String str,int start,int end);/将新文本替换指定位置开始到指定位置结束的文本
16、;getColumnWidth();/获取列的宽度;getLineCount();/获取文本区包含的行数;getPreferredSize();/返回文本区的首选大小;getRows();/返回文本域的行数;setLineWrap(boolean b);/是否自动换行,默认为false例子:TextAreaDemo.java,8.4 常用的布局管理器,布局管理器负责管理组件在容器中的排列方式;为了支持Java的跨平台性,引入了布局管理器;布局管理器可以用setLayout()方法进行设定;getContentPane().setLayout(LayoutManager mgr);若不使用布局管
17、理器,则将参数设置为null;getContentPane().setLayout(null);若不使用布局管理器,则必须使用直接定位的方式排列所有组件;缺点是不能保证在其他平台上能够正确显示;,8.4.1 不使用布局管理器(略),8.4.2 FlowLayout布局管理器 FlowLayout类实现的布局管理器称为流布局管理器;排列方式:首先在一行上排列组件,若没有足够的空间,则回行显示;当容器大小发生变化时,按此规则重新排列组件;流布局管理器默认居中显示组件,可通过setAlignment()方法进行设定;setAlignment(int align);align可选值:FlowLayou
18、t.LEFTFlowLayout.CENTERFlowLayout.RIGHT,FlowLayout布局管理器默认组件间的距离(水平、垂直)为5像素;可用setHgap(int hgap);和setVgap(int vgap);进行设置例子:FlowLayoutDemo.java,8.4.3 BorderLayout布局管理器,即边界布局管理器;布局方式:将窗口划分为5个部分;,边界布局管理器为JFrame窗体的默认布局管理器;若容器采用了边界布局管理器,在将组件添加到容器时,必须指定其显示位置,指定方法如下:add(Component comp,Object constraints);com
19、p:被添加的组件;constraints:显示位置,可选值为BorderLayout的常量值:BorderLayout.CENTER;BorderLayout.NORTH;BorderLayout.SOUTH;BorderLayout.WEST;BorderLayout.EAST;,BorderLayout布局管理器默认组件间的水平、垂直距离均为0像素,可通过setHgap(int hgap);和setVgap(int vgap)进行设定;例子:BorderLayoutDemo.java,8.4.4 GridLayout布局管理器,即网格布局管理器;布局方式:将容器按照用户的设置平均分成若干网
20、格,可通过GridLayout()构造函数进行指定;GridLayout(int rows,int cols);说明:rows0&cols=0:容器先按行进行排列,当组件个数大于rows时,再增加一列;rows=0&cols0:容器先按列进行排列,当组件数大于cols时,再增加一行;rows0&cols0:容器先按行进行排列,当组件个数大于rows时,再增加一列;rows0&cols0&组件个数大于rows*cols时:再增加一列;,GridLayout布局管理器默认组件间水平、垂直距离均为0像素,可通过setHgap(int)和setVgap(int)进行设定;例子:GridLayoutDe
21、mo.java,8.5 常用的面板,面板可以添加到JFrame窗体中;子面板可以添加到上一层面板中,可以实现对所有组件进行分层管理,不同关系的组件采用不同的布局管理方式,使界面更美观;,8.5.1 JPanel面板,JPanel默认采用FlowLayout布局管理方式;例子:PanelDemo.java,8.5.2 JScrollPane面板,为组件提供带滚动条的面板;JScrollPane类提供的常用方法setViewportView(Component view);/设置在面板中显示的组件;setHorizontalScrollBarPolicy(int);/设置水平滚动条的显示方式;se
22、tVerticalScrollBarPolicy(int);/设置垂直滚动条的显示方式;setWheelScrollingEnabled(false);/设置滚动条是否支持鼠标滚轮;,JScrollPane类提供的滚动条的显示方式(静态常量)HORIZONTAL_SCROLLBAR_AS_NEEDED:需要时显示;HORIZONTAL_SCROLLBAR_NEVER:水平滚动条永不显示;HORIZONTAL_SCROLLBAR_ALWAYS:水平滚动条一直显示;VERTICAL_SCROLLBAR_AS_NEEDED:需要时显示;VERTICAL_SCROLLBAR_NEVER:垂直滚动条永不
23、显示;VERTICAL_SCROLLBAR_ALWAYS:垂直滚动条一直显示;,例子:ScrollPaneDemo.java8.6 常用事件处理8.6.1 动作事件处理动作事件由ActionEvent类捕获,最常用的是当单击按钮后发出的动作事件,可通过实现ActionListener接口处理相应的动作事件;ActionListener接口的原型如下:public interface ActionListener extends EventListenerpublic void actionPerformed(ActionEvent e);,ActionEvent类提供的常用方法,getSour
24、ce():获取触发此事件的对象,返回类型为Object;getActionCommand():获取与当前动作相关的命令字符串,返回类型为String;例子:ActionEventDemo.java,8.6.2 焦点事件处理,焦点事件由FocusEvent类捕获,对于焦点事件可以通过实现FocusListener接口处理相应的事件;FocusListener接口原型:public interface FocusListener extends EventListenerpublic void focusGained(FocusEvent e);public void focusLost(Focu
25、sEvent e);,8.6.2 焦点事件处理,FocusEvent类比较常用的方法getSource():获取触发事件的目标对象;例子:FocusEventDemo.java8.6.3 鼠标事件处理MouseEvent类捕获鼠标事件,可通过MouseListener接口处理鼠标事件;MouseListener有5个抽象方法(下页),public interface MouseListener extends EventListener/鼠标进入时触发public void mouseEntered(MouseEvent e);/鼠标按下时触发public void mousePressed(
26、MouseEvent e);/鼠标释放时触发public void mouseReleased(MouseEvent e);/鼠标单击时触发public void mouseClicked(MouseEvent e);/鼠标移出时触发public void mouseExited(MouseEvent e);,MouseEvent类提供的常用方法getSource():返回触发此事件的对象(事件源),返回值为Object类型;getButton():获取鼠标按下,释放,单击时的键;可由MouseEvent的静态常量表示;getClickCount():获取单击的按键次数;表8-17 Mouse
27、Event类中代表鼠标按键的静态常量,例子:MouseEventDemo.java,8.6.4 键盘事件处理,键盘事件由KeyEvent类捕获,可以通过KeyListener接口处理相应的键盘事件;KeyListener定义了3个抽象方法,分别为:public interface KeyListener extends EventListener/发生击键动作时触发public void keyTyped(KeyEvent e);/键按下时触发public void keyPressed(KeyEvent e);/键释放时触发public void keyReleased(KeyEvent e
28、);,KeyEvent类提供的常用方法getSource():获取触发此事件的对象(事件源,返回值为Object类型;getKeyCode():与此事件相关联的键的整数;getKeyChar():触发事件键的字符;getKeyText(int keyCode):用来获取描述keyCode的标签,如A,F1,HOME等;isActionKey():查看事件中的键是否为动作键;isControlDown():查看事件中Ctrl键是否按下,若按下,则返回true;isAltDown():查看事件中Alt键是否被按下,若按下,则返回true;isShiftDown():查看事件中Shift键是否被按下,若按下,则返回true;,KeyEvent类中以VK_开头的静态常量代表各个键的keyCode,可以通过这些静态常量判断事件中的按键,以及获得按键的标签;例子:KeyEventDemo.java,