-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI(图形用户界面)
GUI
• Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直
观。
CLI
• Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中
Awt和Swing
• java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
• javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
• FlowLayout(流式布局管理器)• 从左到右的顺序排列。• Panel默认的布局管理器
• BorderLayout(边界布局管理器)• 东,南,西,北,中• Frame默认的布局管理器。
• GridLayout(网格布局管理器)• 规则的矩阵
• CardLayout(卡片布局管理器)• 选项卡
• GridBagLayout(网格包布局管理器)• 非规则的矩阵
事件监听机制组成
事件源(组件)就是awt包或者swing包中的那些图形界面组件。
事件(Event)每一个事件源都有自己特有的对应事件和共性事件。
监听器(Listener)将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
事件处理(引发事件后处理方式)
事件监听机制
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
import java.awt.*; import java.awt.event.*; /* 创建图形化界面: 1,创建frame窗体。 2,对窗体进行基本设置。 比如大小,位置,布局。 3,定义组件。 4,将组件通过窗体的add方法添加到窗体中。 5,让窗体显示,通过setVisible(true) */ class AwtDemo { public static void main(String[] args) { Frame f = new Frame("my awt"); f.setSize(500,400); f.setLocation(300,200); f.setLayout(new FlowLayout()); Button b = new Button("我是一个按钮"); f.add(b); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("我关"); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("我活了。"); } public void windowOpened(WindowEvent e) { System.out.println("我被打开了,hahahhahah"); } }); f.setVisible(true); } }
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class FrameDemo { //定义该图形中所需的组件的引用。 private Frame f; private Button but; FrameDemo() { init(); } public void init() { f = new Frame("my frame"); //对frame进行基本设置。 f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上事件。 myEvent(); //显示窗体; f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //让按钮具备退出程序的功能 //通过查阅button的描述。发现按钮支持一个特有监听addActionListener but.addActionListener(new ActionListener() { private int count = 1; public void actionPerformed(ActionEvent e) { Button b = (Button)e.getSource(); Frame f1 = (Frame)b.getParent(); f1.add(new Button("button-"+count++)); f1.validate(); } }); } public static void main(String[] args) { new FrameDemo(); } }
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class FrameDemo { //定义该图形中所需的组件的引用。 private Frame f; private Button but; FrameDemo() { init(); } public void init() { f = new Frame("my frame"); //对frame进行基本设置。 f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上事件。 myEvent(); //显示窗体; f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //让按钮具备退出程序的功能 //通过查阅button的描述。发现按钮支持一个特有监听addActionListener but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("ESC,button do"); System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } }
public class MouseAndKeyDemo { public static void main(String[] args) { new MouseAndKeyDemo(); } //定义该图形中所需的组件的引用 private Frame f; private Button but; private TextField tf; MouseAndKeyDemo() { init(); } public void init() { f = new Frame("my frame"); but = new Button("my button"); f.add(but); //创建一个指定长度的文本框; tf = new TextField(30); f.add(tf); f.setBounds(300, 200, 650, 550); f.setLayout(new FlowLayout()); setEvent(); f.setVisible(true); } public void setEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); //给按钮添加鼠标监听 but.addMouseListener(new MouseAdapter(){ private int count = 1; private int clickCount = 1; public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入到该组件"+count++); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) System.out.println("鼠标双击"+clickCount++); } }); //给按钮添加键盘监听 but.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ESCAPE) System.exit(0); } }); //给文本框添加监听器,实现只能输入数字 tf.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9)) { System.out.println("出现非法字符"); e.consume(); } } });
public class Test { public static void main(String[] args) { new Test(); } private Frame f; private TextField tf; private Button but; private TextArea ta; private Dialog d; private Label lab; private Button okbut; Test(){ init(); } private void init() { f = new Frame("my window"); tf = new TextField(30); but = new Button("转到"); ta = new TextArea(30,50); //创建一个对话框 d = new Dialog(f,"提示信息",true); //设置对话框的的布局管理器 d.setLayout(new FlowLayout()); //设置对话框的位置和大小 d.setBounds(400, 200, 240, 120); //设置对话框的显示内容 lab = new Label(); okbut = new Button("确定"); //把内容和按钮添加到对话框中 d.add(lab); d.add(okbut); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); f.add(tf); f.add(but); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent() { //窗体关闭监听器 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); //显示文件的监听器 but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { String filePath = tf.getText(); File dir = new File(filePath); if(dir.exists() && dir.isDirectory()) { tf.setText(""); ta.setText(""); String[] dirs = dir.list(); for(String name : dirs) { ta.append(name+" "); } }else{ String s = "您出入的地址:"+filePath+"是错误的"; lab.setText(s); d.setVisible(true); } } }); //对话框关闭监听器 d.addWindowListener(new WindowAdapter(){ public void windowClosing() { d.setVisible(false); } }); //对话框中确定按钮的监听器 okbut.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); } }
菜单:
public class MyMenuDemo { public static void main(String[] args) { new MyMenuDemo(); } private Frame f; private MenuBar mb; private Menu m,subMenu; private MenuItem mi,subItem; MyMenuDemo(){ init(); } private void init() { f = new Frame("my frame"); f.setBounds(300, 200, 600, 500); f.setLayout(new FlowLayout()); //创建一个菜单栏 mb = new MenuBar(); //创建一个菜单 m = new Menu("文件"); subMenu = new Menu("子菜单"); //创建菜单项 mi = new MenuItem("退出"); subItem = new MenuItem("子条目"); //将菜单项关联到菜单中 subMenu.add(subItem); m.add(subMenu); m.add(mi); //将菜单添加到菜单条中 mb.add(m); //将菜单栏添加到窗体中 f.setMenuBar(mb); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); mi.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); } }
-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------