• 1. 湘恒教育—JAVA基础培训十月 18Java的GUI编程
  • 2. 目标了解GUI编程和AWT包及其组件 理解Swing和AWT的区别 理解Java常用布局管理器 运用简单swing组件编写Java图形化应用程序 JAVA基础培训—Java的GUI编程
  • 3. 本章理解词汇JAVA基础培训—Java的GUI编程单 词说 明component组件container容器Jframe框架、窗口Jpanel面板Layout布局flowlayout流式布局BorderLayout边框布局GridLayout网格布局East东 West西 South南 North北
  • 4. 脑图JAVA基础培训—Java的GUI编程GUI编程AWT与Swing如何创建图形界面布局管理器
  • 5. 什么是GUI编程JAVA基础培训—Java的GUI编程graphical user interfaces--图形用户界面 为用户提供界面友好的所见所得的桌面操作环境。 JComboBoxJCheckBoxJButtonJRadioButtonJLabelJTexAreaJTexField
  • 6. java.awt包java.awt包是Java内置的包,属于Java基本类库(JFC)的一部分,其中包括以下内容: 便于用户输入的一组丰富的界面组件; 将组件放置在适当位置的几中布局管理器; 事件处理模型; 图形和图像工具等等。 要使用到该包中的类,则必须显式地声明如下语句: import java.awt.*; JAVA基础培训—Java的GUI编程
  • 7. java.awt包中控件类的体系结构JAVA基础培训—Java的GUI编程ComponentButtonCheckboxContainerChoiceCanvasTextComponentLabelPanelAppletFrameDialogWindowTextAreaTextField
  • 8. Swing简介和javax.swing包Swing是在AWT基础上发展而来的轻量级组件,与AWT相比不但改进了用户界面,而且所需的系统资源更少; Swing是纯Java组件,使所有的应用程序在不同的平台上运行时具有本机外观和相同的行为。 javax.swing包包含了一系列Swing控件,如果要使用该包中的类,则必须显式地声明如下语句: import javax.swing.*; JAVA基础培训—Java的GUI编程
  • 9. javax.swing包中控件类的体系结构JAVA基础培训—Java的GUI编程JFrameFrameJDialogDialogWindowJComponentContainerComponentObjectJOptionPaneJMenuBarJListJLabelJComboBoxJTextJPanelJScrollBarAbstractButtonJMenuItemJButtonJToggleButtonJMenuJRadioButtonJCheckBoxJTextFieldJTextArea
  • 10. 组件类与容器类组件(Component):基本图形元素,如按钮,文本框,文本域,多选按钮,单选按钮等 容器(Container):可以容纳组件的区域,在容器上可以添加别的组件。如:Frame, Window等。 注意:容器中可以容纳组件,也可以容纳比它“容量级别小”的容器。 JAVA基础培训—Java的GUI编程
  • 11. AWT容器JAVA基础培训—Java的GUI编程Window的子类 Frame:最常用的窗体 Dialog:对话框 有两种类型的容器:Window和PanelWindow的与Panel的区别: Window是能够独立存放的容器; Panel不能单独存在,必须放入 Window或其子类中
  • 12. Swing GUI框架JAVA基础培训—Java的GUI编程你好,世界菜单栏顶级容器GUI组件GUI组件内容窗格
  • 13. 顶级容器JFrame:用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带 GUI 的应用程序通常至少使用一个框架窗口。 JDialog:用于对话框的类。 JApplet:用于使用 Swing 组件的 Java Applet 的类。 JAVA基础培训—Java的GUI编程
  • 14. 中间容器JPanel:最灵活、最常用的中间容器。 JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。 JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。 JToolBar:按行或列排列一组组件(通常是按钮)。 JAVA基础培训—Java的GUI编程
  • 15. javax.swing.JFrameJFrame组件用于在Swing程序中创建窗体; 以下是JFrame常见的构造方法: JAVA基础培训—Java的GUI编程构造方法说 明JFrame()创建一个框架,该框架初始为不可见JFrame(String title)创建一个框架,参数title为窗体标题,该框架初始为不可见
  • 16. JFrame的常用方法JAVA基础培训—Java的GUI编程函数原型说 明void setTitle(String title)以title中指定的值,设置窗体的标题void setSize(int w, int h)设置窗体的大小,参数w和h指定宽度和高度void show()显示窗体Container getContentPane()获得窗体的内容面板,当要往窗体中添加组件或设置布局时,要使用到该方法void setVisible(boolean b)设置窗体是否为可见,由参数b决定void setBackground(Color c)设置窗体的背景色
  • 17. 创建窗体示例JAVA基础培训—Java的GUI编程import javax.swing.*; public class SwingDemo extends JFrame { /*构造方法*/ public SwingDemo() { this.setTitle(“我的第一个GUI程序”); //设置窗体的标题 this.setSize(300, 200); //设置窗体的大小 this. setVisible (true); //将窗体显示 this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); } /*main方法,程序入口*/ public static void main(String[] args){ //创建窗体的实例,匿名对象 new SwingDemo(); } }
  • 18. JPanel容器JPanel是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内。 JPanel只能存在于其他的容器(Window或其子类)中,一般被放入Frame中 JFrame可以被划分为若干个JPanel,然后在JPanel上进一步进行组件的布局; 面板的默认布局管理器是FlowLayout布局管理器; 不能为JPanel设置标题。 JAVA基础培训—Java的GUI编程
  • 19. Javax.swing.JPanel的常用方法JAVA基础培训—Java的GUI编程函数原型说 明JPanel()创建默认布局(FlowLayout)的面板JPanel(LayoutManager layout)以指定的布局管理器创建面板void setLayout(LayoutManager layout)以指定布局管理器设置面板的布局Component add(Component comp)往面板内添加控件Void setBackground(Color bg)设置面板的背景色
  • 20. 布局管理器布局管理器用来: 决定组件在容器上如何摆放; 决定组件的大小; Frame的默认布局管理器是BorderLayout; JAVA中常用的布局: FlowLayout(流式布局) BorderLayout(边框布局) GridLayout(网格布局) GridBagLayout(网格包布局) CardLayout (卡片布局) JAVA基础培训—Java的GUI编程
  • 21. 为容器设置布局布局管理器(LayoutManager)指的是FlowLayout,BorderLayout等类的对象; 调用容器对象的setLayout(LayoutManager lm)方法,即可为容器设置不同的布局; 利用多种复杂布局的组合,总可以达到你想要的效果。 JAVA基础培训—Java的GUI编程
  • 22. FlowLayoutJAVA基础培训—Java的GUI编程容器流布局是面板的默认布局管理器左上角右下角依次排序的组件垂直或水平间距
  • 23. BorderLayout JAVA基础培训—Java的GUI编程 上边的组件 左 边 的 组 件右 边 的 组 件 下边的组件 容器NorthSouthEastWestCENTER
  • 24. GridLayout JAVA基础培训—Java的GUI编程行列组件大小相同重新调整组件大小 以适合各自的单元指定网格中的行数和列数,创建网格布局
  • 25. CardLayout可存储几个不同的布局。 每个布局就像是一个卡片组中的一张卡片。 在一个给定的时间总会有一张卡片在顶层。 卡片通常为一个 Panel 对象。 每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。 JAVA基础培训—Java的GUI编程
  • 26. GridBagLayout 通过使用以下语法容器可获得 GridBagLayout: GridBagLayout gb=new GridBagLayout(); ContainerName.setLayout(gb); 要使用此布局,必须提供各组件的大小和布局等信息。 GridBagConstraints 类中包含 GridBagLayout 类用来定位及调整组件大小所需的全部信息。JAVA基础培训—Java的GUI编程组件大小不必相同 组件按行和列排列 放置顺序不一定为从左至右和由上至下
  • 27. GridBagConstraints 类成员变量列表: gridx, gridy : 指定组件放置于哪个单元中 gridwidth, gridheight : 指定组件将占用多少行和多少列 weightx, weighty : 指定在一个 GridBagLayout 中应如何分配空间,这些变量的缺省值为 0 ipadx, ipady : 指定组件的高度和宽度 JAVA基础培训—Java的GUI编程
  • 28. GridBagConstraints成员变量列表: fill : 指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONE anchor : 指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER JAVA基础培训—Java的GUI编程
  • 29. Swing 组件Swing 组件独立于本地窗口系统。 Swing组件除了 AbstractButton 类之外都以 J 开头。 Swing 组件是基于 AWT 构建。 包含 AWT 可视化组件的替代组件,也包含复杂组件 - 树和表 JAVA基础培训—Java的GUI编程J
  • 30. JLabel JAVA基础培训—Java的GUI编程它既可以显示文本也可以显示图像 构造函数如下: JLabel(Icon icon):icon表示使用的图标 JLabel(String text,Icon icon,int align):text表示使用的字符串; icon表示使用的图标;align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。… ImageIcon icon = new ImageIcon("Calv.gif"); JLabel calv_label = new JLabel("这是 Calvin", icon, SwingConstants.LEFT); …
  • 31. 文本组件 JtextComponent 为所有 Swing 文本组件的根类JAVA基础培训—Java的GUI编程JTextField JTextComponentJEditorPaneJTextAreaJTextPaneJPasswordField
  • 32. JTextFieldJTextField 组件允许输入或编辑单行文本 此类的构造函数包括: JTextField() JTextField(Document doc, String text, int columns) JTextField(int columns) JTextField(String text) JTextField(String text, int columnJAVA基础培训—Java的GUI编程… Container con = getContentPane(); con.setLayout(new FlowLayout()); JLabel jl = new JLabel(“文本域”); con.add(jl); JTextField tf = new JTextField(20); con.add(tf); …
  • 33. JTextAreaJTextArea 组件用于接受来自用户的多行文本 它可实现可滚动界面 JTextArea 组件可使用下列构造函数创建: JTextArea() JTextArea(int rows, int cols) JTextArea(String text) JTextArea(String text, int rows, int cols) JTextArea(Document doc) JTextArea(Document doc, String text, int rows, int cols) JAVA基础培训—Java的GUI编程… JLabel jl = new JLabel(“文本区”); con.add(jl); JTextArea ta = new JTextArea(5,10); con.add(ta); …
  • 34. 选择性输入为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有: 复选框 单选按钮 列表框 组合框JAVA基础培训—Java的GUI编程
  • 35. 复选框复选框用于为用户提供一组选项 JCheckBox 类具有下列构造函数: JCheckBox() JCheckBox(Icon icon) JCheckBox(Icon icon, boolean selected) JCheckBox(String text) JCheckBox(String text, boolean selected) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon, boolean selected) JAVA基础培训—Java的GUI编程
  • 36. 单选按钮单选按钮允许用户从多个选项中选择其中一个 ButtonGroup 用于在 Swing 中创建组 JRadioButton 对象可使用下列构造函数创建: JRadioButton() JRadioButton(Icon icon) JRadioButton(Icon, boolean selected) JRadioButton(String text) JRadioButton(String text, boolean selected) JRadioButton(String text, Icon icon) JRadioButton(String text, Icon icon, boolean selected) JAVA基础培训—Java的GUI编程
  • 37. JCheckBox和JRadioButton使用示例JAVA基础培训—Java的GUI编程import java.awt.*; import javax.swing.*; class Hobby extends JPanel { JCheckBox c1 = new JCheckBox("阅读",false); JCheckBox c2 = new JCheckBox("音乐",false); JCheckBox c3 = new JCheckBox("绘画",false); JRadioButton rad1 = new JRadioButton("大专"); JRadioButton rad2 = new JRadioButton("本科"); JRadioButton rad3 = new JRadioButton("硕士"); JLabel jl = new JLabel("您有什么爱好?" ); JLabel j2 = new JLabel("您的最高学历?" ); JButton exitbtn = new JButton("退出"); public Hobby( ) { setLayout(new GridLayout(9,1)); add(jl); add(c1); add(c2); add(c3); add(j2); add(rad1); add(rad2); add(rad3); add(exitbtn); } }public class Hobbytest extends JFrame { Hobbytest() { super(); getContentPane().add(new Hobby()); setSize(300,200); setVisible(true); } public static void main(String args[]) { new Hobbytest(); } }
  • 38. 列表在可供选择的选项很多时,可向用户呈现一个列表来供他们选择 JList 组件依次排列项目列表,这些项目可以单选或多选 JList 类既可显示字符串,也可显示图标 JList 不支持双击 MouseListener 可用于解决双击问题 JAVA基础培训—Java的GUI编程
  • 39. JList 构造函数public JList() : 使用空模型构造 JList public JList(ListModel dataModel) :构造一个列表,用它显示指定模型中的元素。 public JList (Object [] listData) :构造一个列表以显示指定数组listData的元素。 JList 不支持滚动。要启用滚动,可使用下列代码: JScrollPane myScrollPane=new JScrollPane(); myScrollPane.getViewport().setView(dataList);JAVA基础培训—Java的GUI编程… String stars[] = {"安东尼奥.班德拉斯","来昂纳多.迪卡普尼奥", "桑德拉.布洛克","休.格兰特","朱莉亚.罗伯茨"}; JList moviestars = new JList(stars); …
  • 40. 组合框文本域和下拉列表的组合 在 Swing 中,组合框由 JComboBox 表示 构造函数如下: public JComboBox() : 此构造函数使用缺省数据模型创建 JComboBox public JComboBox(ComboBoxModel asModel) : 使用现有 ComboBoxModel 中的项目的组合框 public JComboBox(Object [] items) : 包含指定数组元素的组合框 JAVA基础培训—Java的GUI编程… String names[] = {"弗雷德里克.福西斯", "约翰.克里沙姆", "玛丽.希金斯.克拉克","帕特丽夏.康威尔"}; JComboBox authors = new JComboBox(names); …
  • 41. 菜单菜单显示项目列表,指明各种任务。 选择或单击某个选项时会打开另一个列表或子菜单。 Swing 菜单由菜单栏、菜单和菜单项构成。 菜单栏是所有菜单和菜单项的根 JAVA基础培训—Java的GUI编程
  • 42. JFC 菜单组件JAVA基础培训—Java的GUI编程JMenuBarJPopupMenuAbstractButtonJSeperatorJMenuItemJMenuJCheckBoxMenuItemJRadioButtonMenuItemJComponentContainerComponentObject
  • 43. JMenuBarJMenuBar 是可通过 JFrame、JWindow 或 JInternalFrame 的根窗格添加至容器的组件。 由多个 JMenu 组成,每个 JMenu 在 JMenubar 中都表示为字符串。 JMenuBar 需要两个附加类: SingleSelectionModel类 : 跟踪当前选定的菜单 LookAndFeel类 :负责绘制菜单栏以及对在其中发生的事件作出响应 JAVA基础培训—Java的GUI编程
  • 44. JMenuJMenu 在 JMenuBar 下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。 JMenu 具有两个附加类: JPopupMenu :用于显示 JMenu 的菜单项 LookAndFeel :负责绘制菜单栏中的菜单以及对在其中发生的所有事件作出响应 JAVA基础培训—Java的GUI编程
  • 45. JPopupMenu 的函数JAVA基础培训—Java的GUI编程方法用途public JMenuItem add(JMenuItem menuItem)将指定菜单项附加至菜单末尾public JMenuItem add(String s)使用指定文本新建菜单项,并将其添加至菜单末尾public void show(Component c, int x, int y)在组件c的坐标 (x,y) 位置显示弹出式菜单public boolean isPopupTrigger()确定鼠标事件是否为平台的弹出触发器
  • 46. JMenuItemJMenu 或 JPopupMenu 中的一个组件,以文本字符串形式显示,可以具有图标 JMenuItem 的外观可以修改,如字体、颜色、背景、边框等 除字符串外,在 JMenuItem 中还可以添加图标 JAVA基础培训—Java的GUI编程
  • 47. JCheckBoxMenuItem将复选框作为其项目 复选框是使用 JCheckBox 类创建的 可有文本字符串和(或)图标 在单击并释放 JCheckBoxMenuItem 时,菜单项的状态会变为选定或取消选定 JAVA基础培训—Java的GUI编程
  • 48. JRadioButtonMenuItem除了在任何时间点都只能选择一个单选按钮外,其他的与复选框类似 可有文本字符串和(或)图标 单击选定的单选按钮不会改变其状态 单击未选定的单选按钮时将取消选定此前选定的单选按钮 JAVA基础培训—Java的GUI编程
  • 49. 菜单使用示例JAVA基础培训—Java的GUI编程import javax.swing.*; import java.awt.*; public class Menutest extends JFrame { public Menutest() { JMenuBar mb = new JMenuBar(); JMenu fileMenu = new JMenu("显示"); JMenu pullRightMenu = new JMenu(“问好"); fileMenu.add("欢迎"); fileMenu.addSeparator(); fileMenu.add(pullRightMenu); fileMenu.add("退出"); pullRightMenu.add(new JCheckBoxMenuItem("早上好!")); pullRightMenu.add(new JCheckBoxMenuItem("下午好!")); pullRightMenu.add(new JCheckBoxMenuItem("晚安!再见!")); mb.add(fileMenu); setJMenuBar(mb); } }
  • 50. 总结2-1AWT是用于图形界面编程GUI的类库; GUI的类库分为三种类:组件类、容器类、布局管理器类; 常用的容器有:Frame和Panel,Panel必须放在Frame中; 常见的组件有:Button,TextField,Label等; 常用的布局有:FlowLayout流式布局,BorderLayout边框布局,GridLayout网格布局; 可用方法为容器设置其可见性,大小,出现坐标等属性。 JAVA基础培训—Java的GUI编程
  • 51. 总结 2-2JTextComponent是Swing文本组件的根类 Swing中用于选择性输入的常用组件有:JCheckBox、JRadioButton、JList、JComboBox 菜单是 GUI 中非常有用的一部分 JAVA基础培训—Java的GUI编程