Java图形界面编程
一:基本概念
AWT(Abstract Window Toolkit)
抽象窗口工具包,SUN 公司提供的用于图形界面编程(GUI)的类库。但是AWT得实现严重依赖于下层操作系统,所以导致组件AWT的外观取决于程序运行的平台。AWT的类和接口都定义在java.awt包中。
Swing
Swing组件是实在AWT基础上开发的新型GUI组件,它是纯Java实现的轻量级(light-weight)组件,它不依赖任何特定平台,Swing组件在不同平台具有一致性的表现,但是Swing应用程
序的界面外观不再和原生应用程序的外观相似。而且消耗太多的内存,这样Swing不适于一些小设备.
Swing 采用了MVC(模型-视图-控制,Model-View-Controller)设计模式。
Swing的视图部分有两个基本元素组成:容器和组件
组件:独立的可视化控件。常用到的组件:按钮(类JButton)、单选按钮(类JRadioButton)、复选框(类JCheckBox)、组合框(类JComboBox)、列表框(类JList)、文本字段(类JTextField)、纯文本区(类JTextArea)等等。
容器:是一种设计用来存放其它组件的特殊类型组件。常用到的容器:窗体(JFrame)、对话框(JDialog)、面板(JPanel)、Panel等等。
布局管理器
定义容器中组件摆放位置和大小接口.
AWT 中的五种布局管理器:边界布局管理器(BorderLayout)、流式布局管理器(FlowLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout).
窗体(JFrame,JDialog)的默认布局为 BorderLayout(边界布局管理器)
。
面板()的默认布局管理器是 FlowLayout(流式布局管理器)
。
二:常用类和方法
JFrame
JFrame类是一个顶层窗口,也是一个容器,允许将其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
常用构造方法:
-
- JFrame():可以创建一个无标题的窗口。
- JFrame(String title):创建一个标题为title的窗口
常用方法:
-
- getTitle()/setTitle():获取/设置窗口的标题。
- getState/setState():获取/设置窗口的最小化、最大化等状态。
- isVisible()/setVisible():获取/设置窗口的可视状态(即是否在屏幕上显示)。
- getLocation/setLocation():获取/设置窗口在屏幕上应当出现的位置。
- getSize()/setSize():获取/设置窗口的大小。
- setBounds():获取/设置窗口出现在屏幕上时的初始位置与大小。
- setResizable():设置窗口是否可调整大小,窗口默认是可调整大小的。
- add():将组件添加到窗口中。
- setDefaultCloseOperation() :设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。
JTextField
单行文本框,用来建立文本框的组件,用户可以在文本框中输入单行的文本。
常用构造方法:
-
-
JTextField(int x):创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数x指定。
-
JTextField(String s):创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。
-
常用方法:
-
- public void setText(String text):设置文本框中的文本为参数text指定的文本。
- public String getText():获取文本框中的文本。
- public void setEditable(boolean b):指定文本框的可编辑性(默认为true-可编辑的)。
- public void setHorizontalAlignment(int alignment):设文本在文本框中的对齐方式,其中alignment的有效值确定对齐方式,如:LEFT、CENTER、RIGHT。
JPasswordField
密码框,用于接收密码信息,输入的文本不会以明文形式显示出来。
常用方法:
-
- setEchoChar(char echoChar):设置回显字符(默认的回显字符是‘*’)。
- char[] getPassword():获取密码框中的密码。
JTextArea
多行文本框,用户可以在文本区输入多行的文本。
常用构造方法:
-
- JTextArea(int rows, int columns):构造一个可见行和可见列分别是rows、columns的文本区。
常用方法:
-
- setLineWrap(boolean b):决定输入的文本能否在文本区的右边界自动换行。
- setWrapStyleWord(boolean b):决定是以单词为界(b取true时)或以字符为界(b取false时)进行换行。
- getText():获取文本区的文本。
- setText(String text):设置文本内容。
- append(String text):尾部加文本。
- insert(String text,int index):在文本区的指定位置处插入文本。
- public void copy():拷贝选定的区域。
- public void cut():剪切选定的区域。
- public void paste():在指定的区域粘贴。
JButton
按钮组件,常用构造方法:
-
- public JButton(String text):创建名字是text的按钮。
- public JButton(Icon icon):创建带有图标icon的按钮。
- public JButton(String text, Icon icon):创建名字是text且带有图标icon的按钮。
常用方法:
-
- public String getText():获取当前按钮上的名字。
- public void setText(String text):重新设置当前按钮的名字,名字由参数text指定。
- public Icon getIcon():获取当前按钮上的图标。
- public void setIcon(Icon icon):重新设置当前按钮上的图标。
- public void setHorizontalTextPosition(int textPosition):设置按钮名字相对按钮上图标的水平位置。
- public void setVerticalTextPosition(int textPosition):设置按钮上名字相对按钮上图标的垂直位置。
- public void addActionListener(ActionListener):按钮对象调用该方法可以向按钮增加动作监视器。
- public void removeActionListener(ActionListener):按钮对象调用该方法可以移去按钮上的动作监视器。
JLabel
标签组件,一般用来显示信息,但没有编辑功能。
常用构造方法:
-
- public JLabel():创建空标签对象。
- public JLabel(String text):创建带文本的标签对象。
- public JLabel(String text, int aligment):创建带文本的标签对象,并设置文本对齐方式
常用方法:
-
- String getText():获取标签的名字。
- void setText(String s):设置标签的名字。
JCheckBox
复选框,提供两种状态,一种是选中,另一种是未选中,用户通过单击该组件切换状态。如果不对复选框进行初始化设置,默认的初始化设置均为未选中。
常用构造方法:
-
- public JCheckBox():创建一个没有名字的复选框。
- public JCheckBox(String text):创建一个名字是text的复选框。
常用方法:
- public void setSelected(boolean b):设置按钮状态--是否选中
- public boolean isSelected():如果复选框处于选中状态该方法返回true,否则返回false。
三:事件处理
事件和事件源:
事件:当用户在界面上执行一个操作,例如按下键盘、拖动或者单击鼠标时,都将产生一个事件。Java中事件是用来描述不同类型用户操作的对象,Java中有很多不同类型的事件。例如:单击,双击,右击,拖动,键盘的按下、释放,文本域内容改变等。
事件源:产生事件的组件就是一个事件源。例如,当在一个Button上单击鼠标是,将产生一个ActionEvent类型的事件,而这个Button就是事件源。
事件驱动模型的三大要素:
- 事件源:能够接收外部事件的源体。
- 监听器:能够接收事件源通知的对象。
- 事件处理程序:用于处理事件的对象。
四:示例代码
1 import java.awt.GridLayout; 2 import java.awt.event.ActionEvent; 3 import java.awt.event.ActionListener; 4 import javax.swing.JButton; 5 import javax.swing.JFrame; 6 import javax.swing.JLabel; 7 import javax.swing.JOptionPane; 8 import javax.swing.JPasswordField; 9 import javax.swing.JTextField; 10 11 /** 12 * java图形界面编程演示,以登录为例 13 * 14 * @author 15 * 16 */ 17 public class LoginFrame extends JFrame implements ActionListener { 18 19 private JTextField username; // 用户名 20 private JPasswordField password; // 密码 21 private JButton login; // 登录 22 private JButton cancel; // 取消 23 24 public LoginFrame(String title) { 25 setTitle(title); 26 // 设置大小 27 setSize(200, 100); 28 // 设置居中 29 setLocationRelativeTo(null); 30 // 退出应用程序 31 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 // 不允许修改窗口大小 33 setResizable(false); 34 35 // 生成界面 36 generateInterface(); 37 38 // 注册监听器:匿名内部类 39 // registerListener(); 40 41 // 设置窗体可见 42 setVisible(true); 43 } 44 45 /** 46 * 生成界面 47 */ 48 private void generateInterface() { 49 username = new JTextField(); 50 password = new JPasswordField(); 51 login = new JButton("登录"); 52 53 /* 注册监听器的方式 */ 54 55 // 普通类,实现XxxListener接口 56 // login.addActionListener(new Listener(username, password)); 57 58 // 成员内部类,实现XxxListener接口 59 // login.addActionListener(new Listener()); // 成员内部类 60 61 // 当前类实现XxxListener接口 62 login.addActionListener(this); 63 64 cancel = new JButton("取消"); 65 cancel.addActionListener(this); 66 67 JLabel uname = new JLabel("用户名:"); 68 JLabel upwd = new JLabel("密 码:"); 69 70 setLayout(new GridLayout(3, 2)); 71 72 this.add(uname); 73 this.add(username); 74 this.add(upwd); 75 this.add(password); 76 this.add(login); 77 this.add(cancel); 78 } 79 80 /** 81 * 成员内部类实现ActionListener 82 * 83 * @author 84 * 85 */ 86 class Listener implements ActionListener { 87 @Override 88 public void actionPerformed(ActionEvent e) { 89 String uname = username.getText(); 90 String upwd = new String(password.getPassword()); 91 if ("admin".equals(uname) && "123456".equals(upwd)) { 92 // 消息框 93 JOptionPane.showMessageDialog(null, "登录成功"); 94 } else { 95 // 消息框 96 JOptionPane.showMessageDialog(null, "用户名或密码错误"); 97 } 98 } 99 } 100 101 /** 102 * 匿名内部类实现ActionListener 103 */ 104 private void registerListener() { 105 // 匿名内部类 106 login.addActionListener(new ActionListener() { 107 @Override 108 public void actionPerformed(ActionEvent e) { 109 String uname = username.getText(); 110 String upwd = new String(password.getPassword()); 111 if ("admin".equals(uname) && "123456".equals(upwd)) { 112 // 消息框 113 JOptionPane.showMessageDialog(null, "登录成功"); 114 } else { 115 // 消息框 116 JOptionPane.showMessageDialog(null, "用户名或密码错误"); 117 } 118 } 119 }); 120 } 121 122 /** 123 * 本类实现ActionListener 124 */ 125 @Override 126 public void actionPerformed(ActionEvent e) { 127 JButton btn = (JButton) e.getSource(); 128 if ("登录".equals(btn.getText())) { 129 JOptionPane.showMessageDialog(null, "你点击了登录"); 130 } else { 131 JOptionPane.showMessageDialog(null, "你点击了取消"); 132 } 133 } 134 135 public static void main(String[] args) { 136 LoginFrame frame = new LoginFrame("登录"); 137 } 138 } 139 140 /** 141 * 外部类实现ActionListener 142 * 143 * @author 144 * 145 */ 146 class Listener implements ActionListener { 147 148 private JTextField username; 149 private JPasswordField password; 150 151 public Listener(JTextField username, JPasswordField password) { 152 super(); 153 this.username = username; 154 this.password = password; 155 } 156 157 @Override 158 public void actionPerformed(ActionEvent e) { 159 String uname = username.getText(); 160 String upwd = new String(password.getPassword()); 161 if ("admin".equals(uname) && "123456".equals(upwd)) { 162 // 消息框 163 JOptionPane.showMessageDialog(null, "登录成功"); 164 } else { 165 // 消息框 166 JOptionPane.showMessageDialog(null, "用户名或密码错误"); 167 } 168 } 169 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。