课程总结
18.9 文本组件: JTextComponent
在Swing中也提供了同样的文本框组件,但是文本输入组件在Swing中也分为好几种:
单行文本框: JTextField
密码文本框: JPasswordField
多行文本框: JTextArea
1 单行文本输入组件:JTextField
范例:使用JTextField定义普通文本框
package text; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class JTextDemo01{ public static void main(String args[]){ JFrame jframe = new JFrame("Welcome to CSDN"); JTextField name = new JTextField(30); //定义文本框,并指定内容 JTextField noed = new JTextField("CSDN", 10); //定义文本框,指定内容和长度 JLabel nameLabel = new JLabel("输入用户名:"); // 定义标签 JLabel noedLabel = new JLabel("不可编辑文本:"); noed.setEnabled(false); //此文本框不可编辑 name.setColumns(30); //设置长度,但此时不起作用 noed.setColumns(10); jframe.setLayout(new GridLayout(2, 2)); //设置容器的布局管理器 jframe.add(nameLabel); jframe.add(name); jframe.add(noedLabel); jframe.add(noed); jframe.setSize(300, 100); jframe.setLocation(300, 200); jframe.setVisible(true); } }
以上程序使用了GridLayout的排版格式,第一个文本框是可编辑的;第二个文本框是不可编辑的。
2 密文输入组件:JPasswordField
JTextField是使用明文方式进行数据显示的,如果现在需要将回显的内容设置成其他字符,则可以使用JPasswordField类。
范例:设置密文显示框
package test; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; public class JPasswordDemo01{ public static void main(String args[]){ JFrame jframe = new JFrame("Welcome to CSDN"); JPasswordField jpf1 = new JPasswordField(); JPasswordField jpf2 = new JPasswordField(); jpf2.setEchoChar('#'); JLabel label1 = new JLabel("默认的回显示:"); JLabel label2 = new JLabel("回显设置为“#”:"); label1.setBounds(10, 10, 100, 20); label2.setBounds(10, 40, 100, 20); jpf1.setBounds(110, 10, 80, 20); jpf2.setBounds(110, 40, 50, 20); jframe.setLayout(null); jframe.add(label1); jframe.add(jpf1); jframe.add(label2); jframe.add(jpf2); jframe.setSize(300, 100); jframe.setLocation(300, 200); jframe.setVisible(true); } }
第一个密文框使用的是默认的回显字符;而第二个密文框是将“#” 设置成为回显字符!
3 多行文本输入组件:JTextArea
范例:使用JTextArea
package test; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; public class JTextAreaDemo01{ public static void main(String args[]){ JFrame jframe = new JFrame("Welcome to CSDN"); JTextArea jta = new JTextArea(3, 10); JLabel label = new JLabel("多行文本域:"); label.setBounds(10, 10, 120, 20); jta.setBounds(130, 10, 150, 100); jframe.setLayout(null); jframe.add(label); jframe.add(jta); jframe.setSize(300, 150); jframe.setLocation(300, 200); jframe.setVisible(true); } }
上面程序只是简单地构造了一个文本域。
18.10 事件处理
1 事件和监听器
EventObject类的定义格式如下所示:
public class EventObject extends Object implements Serializable{ public EventObject(Object source){ //构造一个发生事件的对象 } public Object getSource(){ //返回一个事件对象 } public String toString(){ //得到信息 } }
在这个类中定义了3个方法,其中可以通过getSource()方法获得发生此事件的源对象!
大部分图形界面的事件处理类和接口都保存在java.awt.event包中。
2 窗体事件
WindowListener是专门处理窗体的事件监听接口。一个窗体的所有变化,如窗口的打开、关闭等都可以使用这个接口进行监听。
3 监听适配器
在整个事件处理中提供了很多的Adapter(适配器)类,方便用户进行事件处理的实现。
以WindowAdapter类为例,用户只要继承了此类,就可以根据自己的需要覆写所需要的方法,如果现在只关心窗口关闭方法,则只需要在子类中覆写windowClosing()方法即可!!
范例:通过WindowAdapter实现监听
package test; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyWindowAdapterEventHandle extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.out.println("window --> closing!!!"); System.exit(1); } }
4 动作事件及监听处理
要想让一个按钮变得有意义,就必须使用事件处理。在Swing的事件处理中,可以使用ActionListener接口处理按钮的动作事件。 ActionListener接口只定义了一个方法:
interface ActionListener{ void actionPerformed(ActionEvent e); }
因为动作事件有可能有多种事件源调用,所以为了保险起见,在代码操作之前增加了一下验证:
if(e.getSource() == button){ //判断触发源是否是按钮 }
直接使用了地址比较方式,如果操作的事件源是由按钮触发的。则执行语句。当然,此时代码是在一个类中完成,如果现在换成了两个类,则可以通过instanceof关键字来判断操作的数据源类型,如下所示:
if(e.getSource() instanceof JButton){ //判断触发源是否是按钮 }
5 键盘事件及监听处理
在Swing的事件处理中也可以对键盘的操作进行监听。需要使用KeyListener接口!
如果要取得键盘输入的内容,则可以通过KeyEvent取得。
6 鼠标事件及监听处理
MouseListener接口可以对一个鼠标的操作进行监听,如鼠标按下、松开等等操作。该接口定义了以下方法:
在每个事件触发后都会产生MouseEvent事件,此事件可以得到鼠标的相关操作。MouseEvent类的常用方法及常量如下图所示:
7 鼠标拖拽事件及监听处理
在Swing的事件处理中可以使用MouseMotionListener接口来完成鼠标的拖拽操作。
18.11 单选按钮: JRadioButton
JRadioButton类的常用方法如下图所示:
在单选按钮操作中,可以使用ItemListener接口进行事件的监听。
此方法中存在ItemEvent事件,ItemEvent类的常用方法及常量
18.12 复选框:JCheckBox
JCheckBox类的常用方法:
JCheckBox的其他使用方法和JRadioButton类的操作类似.JCheckBox和JRadioButton的事件处理监听接口是一样的,都是使用ItemListener接口。二者的常用方法都在上面。