十. 图形界面(GUI)设计3.标签、按钮和按钮事件
标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关。
标签
标签(JLabel)是最简单的Swing组件。标签对象的作用是对位于其后的界面组件作说明。可以设置标签的属性,即前景色,背景色、字体等,但不能动态地编辑标签中的文本。
程序关于标签的基本内容有以下几个方面:
- 声明一个标签名;
- 创建一个标签对象;
- 将标签对象加入到某个容器。
JLabel类的主要构造方法是:
- JLabel ():构造一个无显示文字的标签;
- JLabel (String s):构造一个显示文字为s的标签;
- JLabel(String s, int align):构造一个显示文字为s的标签。align为显示文字的水平方式,对齐方式有三种:
- 左对齐:JLabel.LEFT
- 中心对齐:JLabel.CENTER
- 右对齐:JLabel.RIGHT
JLabel类的其他常用方法是:
- setText(String s):设置标签显示文字;
- getText():获取标签显示文字;
- setBackground(Color c):设置标签的背景颜色,默认背景颜色是容器的背景颜色;
- setForeground(Color c):设置标签上的文字的颜色,默认颜色是黑色。
按钮
按钮(JButton)在界面设计中用于激发动作事件。按钮可显示文本,当按钮被激活时,能激发动作事件。
JButton常用构造方法有:
- JButton():创建一个没有标题的按钮对象;
- JButton(String s):创建一个标题为s的按钮对象。
JButton类的其他常用方法有:
- setLabel(String s):设置按钮的标题文字。
- getLabel():获取按钮的标题文字。
- setMnemonic(char mnemonic):设置热键
- setToolTipText(String s):设置提示文字。
- setEnabled(boolean b):设置是否响应事件
- setRolloverEnabled(boolean b):设置是否可滚动。
- addActionListener(ActionListener aL):向按钮添加动作监视器。
- removeActionListener(ActionListener aL):移动按钮的监视器。
按钮处理动作事件的基本内容有以下几个方面:
- 与按钮动作事件相关的接口是ActionListener,给出实现该接口的类的定义;
- 声明一个按钮名;
- 创建一个按钮对象;
- 将按钮对象加入到某个容器;
- 为需要控制的按钮对象注册监视器,对在这个按钮上产生的事件实施监听。如果是按钮对象所在的类实现监视接口,注册监视器的代码形式是
addActionListener(this);
参见【例 11-3】,如果是别的类A的对象a作为监视器,类A必须实现ActionListener接口,完成监视器注册需用以下形式的两行代码:
A a = new A(); //创建类A的实例a
addActionListener(a); //用对象a作为监视器对事件进行监视。 - 在实现接口ActionListener的类中,给出处理事件的方法的定义:
public void actionPerformed(ActionEvent e);
在处理事件的方法中,用获取事件源信息的方法获得事件源信息,并判断和完成相应处理。获得事件源的方法有:方法 getSource()获得事件源对象;方法getActionCommand()获得事件源按钮的文字信息。
【例 11-3】处理按钮事件实例,应用程序定义了一个窗口,窗口内设置两个按钮,当点击Red按钮时,窗口的背景色置成红色;点击Green按钮时,窗口的背景色置成绿色(查看源代码)。
用鼠标点击按钮产生事件对象,将事件送达对象,这个过程称为激发事件。当一个事件被送到监视器对象时,监视器对象实现的接口方法被调用,调用时系统会提供事件对象的参数。程序中虽然没有调用监视器方法的的代码,但是程序做了两件事:第一,指定哪一个对象是监视器,它将响应由按钮的激发的事件,这个步骤称为监视器注册。第二,必须定义一个方法,当事件送到监视器时,这个方法将被调用。程序中没有调用这个方法的代码,这个调用是系统执行的。
在上面的程序中,代码
redBut.addActionListener(this);
注册this作为redBut按钮的监视器,随后的代码也注册this作为greenBut按钮的监视器。在上述的程序中,this就是当前的ButtonDemo对象myButtonGUI。这样,ButtonDemo类就是监视器对象的类,对象MyButtonGUI作为两个按钮的监视器。在类ButtonDemo中有监视器方法的实现。当一个按钮被点击时,系统以事件的激发者为参数,自动调用方法actionPerformed ()。
组件不同,激发的事件种类也不同,监视器类的种类也不同。按钮激发的事件称为action事件,相应的监视器称为action监视器。一个action监视器对象的类型为ActionListener,类要实现ActionListener接口。程序体现这些内容需要做到两点:
- 在类定义的首行接上代码implements ActionListener;
- 类内定义方法actionPerformed ()。
前面程序中的类ButtonDemo正确地做到了这两点。
每个界面元素当激发事件时,都有一个字符串与这个事件相对应,这个字符串称为action命令。用代码 e.getActionCommand www.qicaiyulept.cn ()就能获取action事件参数e的命令字符串,据此,方法actionPerformed()就能知道是哪一个按钮激发的事件。在默认情况下,按钮的命令字符串就是按钮上的文字。如有必要可以用方法 setActionCommand()为界面组件设置命令字符串。
十. 图形界面(GUI)设计3.标签、按钮和按钮事件的更多相关文章
- 十. 图形界面(GUI)设计1.图形界面设计基础
早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上.现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单.按钮等,用户通过鼠 ...
- 十. 图形界面(GUI)设计2.框架窗口
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- 十. 图形界面(GUI)设计6.文本框和文本区
在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是Action ...
- 十. 图形界面(GUI)设计7.文本框和文本区的输入输出
在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对 ...
- 十. 图形界面(GUI)设计5.布局设计
在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: FlowLayout, ...
- 十. 图形界面(GUI)设计4.面板
面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...
- 十. 图形界面(GUI)设计12.滚动条
滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代表指定范围内的一个整数.例如,用Word编辑文档时,编辑窗右边的滑块对应当前编辑位置在整个文档中的相对位置,可以通过移动选择新的编辑 ...
- 十. 图形界面(GUI)设计11.对话框
对话框是为了人机对话过程提供交互模式的工具.应用程序通过对话框,或给用户提供信息,或从用户获得信息.对话框是一个临时窗口,可以在其中放置用于得到用户输入的控件.在Swing中,有两个对话框类,它们是J ...
- 十. 图形界面(GUI)设计10.菜单
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
随机推荐
- EasyUi DataGrid 请求Url两次问题
easyui datagrid 1.4 当total为0时,请求两次url问题 框架问题:需要在easyui文件后加修补补丁 /** * The Patch for jQuery EasyUI 1.4 ...
- Java系列学习说明
最近要回顾以前的开发知识了,每天一个案例,争取早日成为一名合格的程序猿,现在就是猴娃子级别的.
- JavaWeb笔记(十一)Maven
什么是Maven Maven是Apache旗下一款开源自动化的项目管理工具,它使用java语言编写,因此Maven是一款跨平台的项目管理工具. 主要功能 项目构建 在实际开发中,不仅仅是写完代码项目就 ...
- [译]在python中如何有效的比较两个无序的列表是否包含完全同样的元素(不是set)?
原文来源: https://stackoverflow.com/questions/7828867/how-to-efficiently-compare-two-unordered-lists-not ...
- java中从实体类中取值会忽略的的问题
在我们java Map中通过get来取值时会忽略的问题是:如果取得一个空值null时,那么.toString()时就会出错,而且不知道是什么原因. 现在我给的具体方法是用条件表达式先判断一下. 例: ...
- 更优雅的清除浮动float方法
上篇文章是利用 :after 方法清除浮动float(作用于浮动元素的父元素上). ; } //为了兼容性,因为ie6/7不能使用伪类,所以加上此行代码. .outer:after {;;visibi ...
- Hexo博客收录百度和谷歌-基于Next主题
Hexo博客收录百度和谷歌-基于Next主题(应该是比较全面的一篇教程) 我们的博客做出来当然是希望别人来访问,但是Github和Coding都做了防爬虫处理,这样子我们博客可能就无法被搜索引擎收录, ...
- Hexo安装配置详解
原文 http://blog.csdn.net/tonydandelion2014/article/details/61615898 http://www.joryhe.com/2016-06-06- ...
- 详解Linux运维工程师应具备的十大技能
Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- bzoj 2671 莫比乌斯反演
Calc Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 451 Solved: 234[Submit][Status][Discuss] Descr ...