9.1AWT和Swing概述

9.1.1AWT概述

图形用户界面GUI(Graphical User Interfaces),给用户提供了一个交互式的直观图形化操作界面。

  • 提供了程序的外观和感觉
  • 每个Java程序利用GUI图形用户界面接受用户的输入,向用户输出程序运行的结果。

Java语言中,为了方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素和处理图形界面的各种事件。用来生成图形用户界面的类库:

  • java.awt包。AWT(abstract window toolkit,抽象窗口工具集)
  • javax.swing包

java.awt包提供了基本的Java程序的GUI设计工具,
包中的主要类或接口之间的继承关系: :

(1)组件Component
组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如Button、Label,组件通常被放在容器中。
Component类是抽象类,定义了所有组件所具有的通用特性和行为,并派生出其他所有的组件。
Compoment类提供的功能:

  • 基本的绘画支持。方法repaint()、paint()、update()等用来在屏幕上绘制组件.
  • 外形控制。包括字体、颜色等。相应的方法有:getFont()、setFont()、setBackground()、SetForeground()等
  • 大小和位置控制。方法有:setSize()、setLocation()等。
  • 图像处理。类Component实现了接口ImageObserver,其中的方法imageUpdate()用来进行图像跟踪。
  • 组件的状态控制。例如:setEnable()控制组件是否接收用户的输入,isEnable(),isVisible()、isValid()返回组件的状态。

(2)容器Container
容器是Component的子类,它具有组件的所有性质,同时又具有容纳其它组件和容器的功能。

  • add()方法向容器添加某个组件,
  • remove()方法从容器中删除某个组件。
    每个容器都与一个布局管理器相联,以确定容器内组件的布局方式。
    容器通过方法setLayout()设置某种布局。

(3)布局管理器LayoutManager
布局管理器管理组件在容器中的布局方式。布局管理器类都实现了接口LayoutManager。
Java系统提供的标准布局管理器类:
FlowLayout、BorderLayout、GridLayout、CardLayout、BoxLayout、GridBagLayout

9.1.2 Swing概述

Swing 组件在javax.swing包中。其特点:
(1) Swing组件是用100%纯Java代码实现的轻量级(light-weight)组件.
没有本地代码,不依赖操作系统的支持,这是它与重量级组件AWT的最大区别。
Swing比AWT组件具有更强的实用性和美观性。
(2) Swing组件的多样化
Swing是AWT的扩展, Swing组件以“J”开头.
有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,
增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。
大多数Swing组件从JComponent类继承
JComponent是一个抽象类,,它定义所有子类组件的一般方法,如:
使用setBorder()方法:设置组件外围的边框;
使用setTooltipText()方法:为组件设置对用户有帮助的提示信息。
(3)可插入的外观感觉
Swing使得程序在一个平台上运行时能够有不同的外观。

  • Swing组件的分类
    从功能上分:
    (1)顶层容器:JFrame,JApplet,JDialog,JWindow共4个
    (2)普通容器:JPanel,JScrollPane,JSplitPane,JToolBar
    (3)特殊容器:在GUI上起特殊作用的中间层JInternalFrame,JLayeredPane,JRootPane.
    (4)基本控件:实现人际交互的组件,如JButton,JComboBox,JList,JMenu,JSlider,JTextField
    (5)向用户显示不可编辑信息的组件.例如JLabel,JProgressBar,ToolTip
    (6)向用户显示能被编辑的格式化信息的组件.如JColorChooser, JFileChooser,JTable,JTextArea

9.2事件处理


事件处理模型

  1. Java的事件处理模型由三部分组成:
    事件源(Event source):是用户交互的各种GUI组件。
    事件对象(Event object):封装了发生事件的有关信息。
    事件监听器(Event listener):当事件发生时被通知到接受事件的事件监听对象,然后调用事件监听对象中对应的方法响应该事件。
    一个事件监听对象是实现了系统规定的事件监听接口的类的对象。
    事件监听接口中提供了事件处理的抽象方法的描述。
    java.awt.event包定义了Java系统的一组事件监听接口类型,一个监听接口往往声明了一个以上的抽象方法。每个抽象方法对应着要处理的事件动作,由用户实现它。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonTest extends JFrame {private JButton plainButton, fancyButton;   public ButtonTest()                   // set up GUI{  super( "JButton的程序设计" );Container container = getContentPane();container.setLayout( new FlowLayout() );plainButton = new JButton( "文本按钮" );container.add( plainButton );Icon bug1 = new ImageIcon( "bug1.gif" );Icon bug2 = new ImageIcon( "bug2.gif" ); fancyButton = new JButton( "文本图像按钮", bug1 ); fancyButton.setRolloverIcon( bug2 ); container.add( fancyButton );ButtonHandler handler = new ButtonHandler();fancyButton.addActionListener( handler );plainButton.addActionListener( handler );setSize( 275, 100 );setVisible( true );} // end ButtonTest constructorpublic static void main( String args[] ){   ButtonTest application = new ButtonTest();application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );}// inner class for button event handlingprivate class ButtonHandler implements ActionListener {// handle button eventpublic void actionPerformed( ActionEvent event ){     JOptionPane.showMessageDialog( ButtonTest.this,"你按下的是:  " + event.getActionCommand() );}}
}

搭建GUI图形界面使用最多的Swing组件:
标签(JLabel)、
单行文本框(JTextField、JTextPassword)
多行文本域(JTextArea)
滚动条面板(JScrollPane)
JLabel标签是用户不能修改只能查看其内容的文本显示区域,它起到信息说明的作用。
JLabel 对象可以显示文本和图像。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CheckBoxTest extends JFrame {private JTextField field;private JCheckBox bold, italic;public CheckBoxTest(){  super( "JCheckBox 的应用" );Container container = getContentPane();container.setLayout( new FlowLayout() );// set up JTextField and set its font and colorfield = new JTextField( "点击复选框,请观察字体风格的变化", 22 );field.setFont( new Font( "Serif", Font.PLAIN, 14 ) );field.setForeground(Color.red);container.add( field );// create checkbox objectsbold = new JCheckBox( "Bold" );container.add( bold );     italic = new JCheckBox( "Italic" );container.add( italic );// register listeners for two JCheckBoxesCheckBoxHandler handler = new CheckBoxHandler();bold.addItemListener( handler );italic.addItemListener( handler ); setSize( 275, 100 );setVisible( true );}public static void main( String args[] ){  CheckBoxTest application = new CheckBoxTest();application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   }// private inner class for ItemListener event handlingprivate class CheckBoxHandler implements ItemListener {private int valBold = Font.PLAIN;private int valItalic = Font.PLAIN;    public void itemStateChanged( ItemEvent event ) {  if ( event.getSource() == bold ) valBold = bold.isSelected() ? Font.BOLD : Font.PLAIN;                        if ( event.getSource() == italic ) valItalic = italic.isSelected() ? Font.ITALIC : Font.PLAIN;field.setFont( new Font( "Serif", valBold + valItalic, 14 ) );}}
}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RadioButtonTest extends JFrame {private JTextField field;private JRadioButton maleButton, womenButton;private ButtonGroup radioGroup;   public RadioButtonTest(){  super( "RadioButton Test" );      Container container = getContentPane();container.setLayout( new FlowLayout() );JLabel label1 = new JLabel( "性别:" );container.add( label1  );      maleButton = new JRadioButton( "男", true );container.add( maleButton );womenButton = new JRadioButton( "女", false );container.add( womenButton );radioGroup = new ButtonGroup();radioGroup.add( maleButton );radioGroup.add( womenButton );    // register events for JRadioButtonsmaleButton.addItemListener( new RadioButtonHandler(  ) );womenButton.addItemListener( new RadioButtonHandler(  ) );field = new JTextField( "性别初值是: 男" ); container.add( field ); setSize( 300, 100 );setVisible( true );} public static void main( String args[] ){   RadioButtonTest application = new RadioButtonTest();application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );} // private inner class to handle radio button eventsprivate class RadioButtonHandler implements ItemListener {// handle radio button eventspublic void itemStateChanged( ItemEvent event ){  if (event.getItem()==maleButton)field.setText( "性别值是: 男" );else if (event.getItem()==womenButton)field.setText( "性别值是: 女" );         }}}

JAVA GUI设计相关推荐

  1. 【java之GUI设计】传说逐渐“退隐江湖”的java之GUI!

    1.组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标事件 键盘 2.简介 Gui核心技术:Swing AWT (不流行) ​ 1.界面不美观 ​ 2.需要jre环境 了解MVC架构, ...

  2. Java界面设计的用途

    一.Java界面设计的用途: JavaSE(Java Standard Edition)即Java标准版,一般也可以理解作Java桌面版.开发者可以通过JavaSE开发丰富并且强大的具有图形界面的桌面 ...

  3. java毕业设计——基于java+Socket+Java GUI的银行排号系统设计与实现(毕业论文+程序源码)——排号系统

    基于java+Socket+Java GUI的银行排号系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Java GUI的银行排号系统设计与实现,文章末尾附有本毕 ...

  4. 利用Java GUI,结合Java Socket,Java多线程,服务器,制作一个简单的具有界面的多用户实时聊天程序(从GUI,到Socket,到多线程,到服务器,项目级别详细教程)

    目录 规划 Java GUI设计 Java Socket Java 服务器 利用 IntelliJ IDEA软件为例 首先,我们应当了解,像运行在两台电脑或者手机终端这样的程序一般是没有办法直接相互发 ...

  5. Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  6. 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏

    基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现,文章末尾 ...

  7. java gui论文_毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc

    毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc 还剩 41页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...

  8. Java大作业-考试管理系统(GUI)无数据库-Java课程设计

    Java课程设计-Java大作业-考试管理系统(GUI)无数据库 题目要求 开发环境 : 程序总功能模块 程序详细设计 使用情况 第一次写这东西有不少错误的地方,题目要求的功能也没有完全实现,以上内容 ...

  9. java售票界面设计_GitHub - CoderGeshu/StationTicketingSystem: Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统...

    StationTicketingSystem 这是一个 Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统. 技术栈 所使用到的技术:Java Swing + Java A ...

  10. 【java毕业设计】基于java+swing+GUI的雷电游戏GUI设计与实现(毕业论文+程序源码)——雷电游戏

    基于java+swing+GUI的雷电游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的雷电游戏GUI设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

最新文章

  1. 多層開發注重效率的注意點
  2. 汇编:SF符号标志位
  3. Bellman_Ford算法
  4. 苏宁大促高并发要求下的售后服务运营能力承诺服务系统架构实战\n
  5. 35款让你爱不释手的网页元素PSD素材
  6. android自定义alertdialog不现实输入法,自定义的dialog中的EditText无法弹出输入法解决方案...
  7. lssvm回归 matlab,lssvm回归预测的程序运行不了 求高手修改指点
  8. 右上角鼠标滑过展开收缩动画效果js代码的演示页面
  9. 【贪心】【AOJ-5】渊子赛马
  10. 数据恢复软件TOP 1—easyrecovery
  11. 低配电脑Win10哪个版本好用?
  12. OpenGG.Clean.Player{喜歡看視頻用戶強推}
  13. jQuery 绑定3种键盘事件 keypress(键盘键按下,功能键和中文不触发),keydown(键盘键按下,所有键都触发),keyup(键盘键松开)
  14. java统计字数_JAVA 仿 MS word 字数统计
  15. mysql 默认值批量更改_mysql 批量修改默认值
  16. 大学新生不知道去哪里找论文参考文献?
  17. 晨枫U盘启动盘制作工具V4.0-安装原版Win7
  18. 广电时评 | 中央主流媒体盛赞爱奇艺短剧新气象
  19. 《人民日报》刊登时评:《壮大国产工业软件,坚定自主创新信念》
  20. STC8H运行smallRTOS51操作系统(1)

热门文章

  1. MkDocs安装、生成文档、风格配置、插件安装
  2. redis 系列16 持久化 RDB
  3. 阿里影业“灯塔平台”今日正式启动,阿里影视云解决方案强势推出
  4. Bresenham直线算法与画圆算法
  5. 传统IO与NIO的区别
  6. TYVJ P1022 进制转换 Label:坑
  7. Linux.CommanlineTool.grep
  8. 【笔记】《编写高质量代码:改善c#程序的157个建议》-第1章 基本语言要素(SamWang)...
  9. VScode加文件头的方式
  10. Windows 8.1安装python出现api-ms-win-crt-runtime-l1-1-0.dll