第21-22讲图形用户界面.ppt
第十一章,图形用户界面(GUI)设计,学习目标:,GUI相关概念 布局管理器的概念和使用方法 事件处理的方法和过程 常用Swing组件的使用,11.1 图形用户界面概述,(1) java.awt包AWT组件重组件,Button(按钮)、TextField(文本框),(2) javax.swing包Swing组件轻组件,JButton(按钮)、JTextField(文本框),观感,Windows观感,Java观感,Motif观感,11.1 图形用户界面概述,2、组件、容器、布局和观感,(1)组件: 可图形化的方式显示在屏幕上,能够与用户交互。 (2)容器: 一种特殊的组件,能容纳其他组件或容器。 顶层容器:JFrame、JApplet、JWindow、JDialog 中间层容器:JPanel、JScrollPane、JTabbedPane 添加组件:add() 删除组件:remove(),(3)布局: 专门管理组件在容器中的布局的工具布局管理器 (4)观感: 决定swing应用程序的外观。默认Java观感(又称为Metal观感),11.1 图形用户界面概述,11.2 布局管理器,Java中的布局类型包括以下几种: FlowLayout(流式布局) BorderLayout (边界布局) CardLayout(卡片布局) GridLayout(网格布局) GridBagLayout(网格包布局),一种最简单的布局。组件一个接一个从左到右、从上到下一排一排依次放在容器中。默认的每一行的组件都居中对齐,水平和垂直间隙是5个像素。 FlowLayout是Panel、Jpanel、Applet的默认布局管理器 构造方法: FlowLayout(); FlowLayout(int align); FlowLayout(int align,int hgap,int vgap);,12.2.2 FlowLayout布局,import java.awt.*; import javax.swing.*; public class FlowLayoutDemo extends JFrame public FlowLayoutDemo() super(“FlowLayout布局“); Container c=getContentPane(); FlowLayout f=new FlowLayout(FlowLayout.LEFT,10,10); c.setLayout(f); for(int i=1;i=10;i+) c.add(new JButton(“按钮“+i); public static void main(String args) JFrame frame=new FlowLayoutDemo(); frame.setSize(250,200); frame.setVisible(true); ,又叫边界布局管理器。将容器分为东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)五个区。 按照“上北下南,左西右东”的规则分配 Window、Dialog、Frame的默认布局;JFrame、JApplet、JDialog的内容窗格的默认布局 构造方法: BorderLayout() BorderLayout(int hgap,int vgap),11.2.3 BorderLayout布局,将布局分为若干个大小相等的网格。当容器尺寸改变时,组件大小改变,但相对位置不变 构造方法: GridLayout() GridLayout(int rows,int cols) GridLayout(int rows,int cols,int hgap,int vgap),11.2.4 GridLayout布局,11.2.5 CardLayout,类似于卡片的布局设置,CardLayout的主要方法: first(Container parent):翻转到容器的第一张卡片 last(Container parent):翻转到容器的最后一张卡片 next(Container parent):翻转到容器的下一张卡片 previous(Container parent):翻转到容器的上一张卡片 show(Container parent, String name): 翻转到已添加的指定name的组件,使用GridBagLayout实现如图所示布局效果,11.2.6GridBagLayout,BoxLayout 盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时是否指定行排列还是列排列。 构造方法: BoxLayout(Container target,int axis) X_AXIS Y_AXIS Box类: createHorizontalBox() createVerticalBox() createHorizontalStruct(int width) createVerticalStruct(int height),11.2.7 Swing布局管理器,11.3.1 事件处理模式,Java 的事件处理模型:授权处理模型 事件源:产生事件的组件,如JButton。 事件对象:触发事件后系统会自动创建事件类的对象,XxxEvent。 监听器:处理事件的实体,XxxListener。,授权处理模型,11.3.3 事件处理方法,(1)实现事件监听器接口法: 定义类来实现这些接口,实现接口中所有的事件处理方法,用不到的写成空方法。 e.getSource()返回事件源对象,class ButtonClick implements ActionListener public void actionPerformed(ActionEvent e) /具体处理事件的代码 if(e.getSource=button1) . . . . . . ,例一:,例二:,例三:,例四:,总结:,图形用户界面基本知识 布局管理器 事件处理,11.4 常用Swing组件,常用容器组件 JFrame JPanel JScrollPane、JSplitPane、JInternalFrame JButton JTextField、JPasswordField、JTextArea JCheckBox JRadioButton JList JComboBox,JFrame,1、简介: JFrame是带标题、边框、窗口状态调节按钮的顶层窗口。 可以是构建Swing GUI应用程序的主窗口,也可以是附属于其他窗口的弹出窗口。 每一个Swing GUI应用程序都至少应包含一个窗体 默认布局为BorderLayout。,2、构造方法 JFrame( ) JFrame(String Title) 3、常用方法: setVisible(true) setSize(长,宽) setResizable(boolean b) setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),JFrame窗体,import java.awt.*; import javax.swing.*; public class JFrameDemo extends JFrame public JFrameDemo() super(“myJFrame“); Container c=getContentPane(); JButton b1=new JButton(“按钮1“); c.add(b1); public static void main(String args) JFrameDemo frame=new JFrameDemo(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400,100); frame.setVisible(true); ,举例1:JFrame的应用,JPanel,JPanel:一种中间容器,可以容纳组件,但他本身必须添加到其他容器中使用。 为了能够更好的管理各组件,我们可以创建多个JPanel。 创建一个面板,默认布局FlowLayout。 new JPanel( ),JScrollPane:把一个组件放入一个滚动窗格,有滚动条。 new JScrollPane(component c ) JSplitPane:被分成两部分的容器 JInternalFrame:内部窗格,JScrollPane、JSplitPane、JInternalFrame,举例:ScrollDemo.java 推荐: Sun官网提供的swing的介绍http:/java.sun.com/docs/books/tutorial/uiswing/index.html,JSplitPane,JTextField文本框,构造方法: JTextField( ) , JTextField(int columns) ,JTextField(String text) ,JTextField(String text, int columns) 常用方法: String getText( ) void setText(String text) void setEditable(boolean b) void setHorizontalAlignment(int alignment),JPasswordField密码框,构造方法同JTextField 常用方法: char getPassword( ) char getEchoChar( ) void setEchoChar(char c),JTextArea文本域(多行),构造方法 JTextArea( ) ,JTextArea(int rows, int cols) ,JTextArea(String text) ,JTextArea(String text, int rows, int cols) 使用JScrollPane加滚动条 常用方法: String getText( ) void setText(String text) void copy() void cut() void paste(),JButton按钮,构造方法 可设置文本和图标 常用方法: void setMnemonic(int c) 设置键盘激活,JLabel标签,构造方法 可设置文本、对齐方式和图标 常用方法: String getText( ) void setText(String text),JCheckBox复选框,构造方法 JCheckBox(Icon icon ,boolean selected ) JcheckBox(String text , boolean selected ) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon, boolean selected) 常用方法: boolean isSelected(),JRadioButton单选按钮,构造 创建组 ButtonGroup group=new ButtonGroup(); 向组中添加项 JRadioButton b1=new JRadioButton(“男”); JRadioButton b2=new JRadioButton(“女”); group.add(b1); group.add(bw); 常用方法: boolean isSelected(),JComboBox下拉列表,下拉列表组件JComboBox 构造 JComboBox( ) JComboBox(Object items) 常用方法: void setSelectedIndex() object getSelectedItem(),11.5 高级组件,JSlider 菜单 JMenuBar、JMenu、JMenuItem、JPopupMenu JTable JTabbedPane 对话框 JOptionPane、JFileChooser,11.5.2 菜单,1、JMenuBar菜单条 一个窗口只能有一个菜单条。,JMenuBar menuBar=new JMenuBar(); frame.setJMenuBar(menuBar);,2、JMenu菜单 一个菜单条上可以有多个菜单。,JMenu menu1=new JMenu(“文件”); JMenu menu2=new JMenu(“帮助”); menuBar.add(menu1); menuBar.add(menu2);,11.5.2 菜单组件,3、JMenuIterm菜单项 一个菜单上可以有多个菜单项。,JMenuItem item1=new JMenuItem(“打开”); JMenuItem item2=new JMenuItem(“退出”); menu1.add(item1); menu1.addSeparator(); menu1.add(item2);,11.5.3表格组件JTable,构造方法 JTable(Object data ,Object columnName ) DefaultTableModel myData = new DefaultTableModel(Object data ,Object column ); JTable table = new JTable(myData); 当组件需要更新显示时: table.epaint(),表内容,表头,表内容,表头,DefaultTableModel类: 构造方法: DefaultTableModel(Object data, Object columnNames) DefaultTableModel(object columnNames,int rowCount) 主要方法: addRow(Object rowData) addColumn(Object columnName) setValueAt(Object aValue, int row,int col) getValueAt(int row,int col),11.5.3表格组件JTable,JTableDemo.java,JTabbedPane,本章小结,常用布局管理器的使用 Java的事件处理机制 Java的常用组件 Java的高级组件,