黑马程序员——GUI图形用户界面-整理笔记

                                                                 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、GUI介绍

        GUI

  • Graphical User Interface(图形用户接口)。
  • 用图形的方式,来显示计算机操作的界面,这样更方便更直观。

        CLI

  •  Command line User Interface (命令行用户接口)
  •  就是常见的Dos命令行操作。
  •  需要记忆一些常用的命令,操作不直观。

       Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

  • java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
  • javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
        GUI布局管理器
             一般的的布局管理器:
                      ①FlowLayout:Panel默认的布局管理器,由左向右排列。
                      ②BorderLayout:Frame的默认布局管理器边界式布局管理器,东南西北中的组织方式,        
                      ③GridLayout:矩阵网格式
                      ④CardLayout:选项卡式布局管理器
                      ⑤GridBayLayout:不是规则矩阵布局管理器,

        主要容器为Container:

               Window窗口,单独窗体容器。可以单独使用。
               Frame:基本窗体框架。
               Dialog:对话框。
               Panel :面板容器。无法单独使用。存在于其他容器当中。

       基本组件:大部分组件设置方式类似窗体属性设置。
       主要基本组件:
                 Button:按钮
                 Checkbox:复选框
                 Choice:单选框
                 TextComponent:
                        TextArea:文本域
                        TextField:文本框(宽度设置为public TextField(int columns))

继承关系图
   


  创建图形界面的步骤:

           ①创建Frame窗体。

           ②对窗体进行基本设置。比如大小、位置、布局。
           ③定义组件。
           ④将组件通过窗体的add方法添加到窗体中。
           ⑤让窗体显示,通过setVisible(true)

示例代码:

package day8;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class FrameDemo {  
    
    //定义该图形中所需要的引用  
    private Frame f;  
    private Button but;  
      
    FrameDemo() {  
        init();  
    }  
      
    //对图形界面进行初始化  
    public void init() {  
        f = new Frame("这是一个窗体");  
        // 对frame进行基本设置  
        f.setBounds(300, 400, 500, 600);  
        f.setLayout(new FlowLayout());  
        
        but = new Button("button");           
        f.add(but);  
        myEvent();          
        f.setVisible(true);  
    }  
      
    //设置事件  
    public void myEvent(){  
        //设置监听器  
        f.addWindowListener(new WindowAdapter() {  
            //设置相应的事件动作  
            @Override  
            public void windowClosing(WindowEvent arg0) {  
                System.exit(0);  
            }  
        });  
          
        //添加一个按钮,具备退出功能  
        //按钮就是事件源  
        but.addActionListener(new ActionListener() {  
              
            public void actionPerformed(ActionEvent arg0) {  
                System.exit(0);  
            }  
        });  
    }  
      
    public static void main(String[] args) {  
        new FrameDemo();  
    }  
  
}  

窗体菜单代码示例:


package day8;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

class MenuDemo {
	private Frame f;
	private Menu m, m1, m2;
	private MenuBar mb;
	private MenuItem closeMenu, openItem, saveItem;

	private FileDialog openDia, saveDia;
	private TextArea ta;
	File file = null;// 文件对象

	MenuDemo() {
		init();
	}

	public void init() {
		f = new Frame("菜单");
		// 窗体设置
		f.setBounds(200, 100, 600, 600);

		mb = new MenuBar();
		m = new Menu("文件");
		m1 = new Menu("一级菜单");
		m2 = new Menu("二级菜单");
		closeMenu = new MenuItem("退出");
		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		saveItem.setShortcut(new MenuShortcut(KeyEvent.VK_S));// 添加快捷命令
		// 打开 保存 对话框
		openDia = new FileDialog(f, "打开", FileDialog.LOAD);
		saveDia = new FileDialog(f, "保存", FileDialog.SAVE);
		// 文本框
		ta = new TextArea();

		// 将菜单相关组件 添加到窗体
		f.setMenuBar(mb);// 窗体添加菜单栏setMenuBar()
		mb.add(m);// MenuBar菜单栏中只能添加Menu不可以添加Menu的父类MenuItem
		m.add(openItem);
		m.add(saveItem);
		// m.addSeparator();//添加分割线
		m.add(m1);
		m1.add(m2);
		m.add(closeMenu);
		f.add(ta);
		/*
		 * 代码添加顺序就是图形的顺序 一个菜单项只有一个图形显示 当第二次添加同一个菜单项的时候 之前添加此菜单项的语句被覆盖 或者说 失效
		 */
		myEvent();
		f.setVisible(true);
	}

	public void myEvent() {
		// 为窗体添加 监听器
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		// 为菜单项 添加监听器
		closeMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		openItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				openDia.setVisible(true);
				// 打开文本文件 显示内容在文本框
				String dirPath = openDia.getDirectory();
				String fileName = openDia.getFile();
				System.out.println(dirPath + "...." + fileName);
				file = new File(dirPath, fileName);
				if (dirPath == null || fileName == null)
					return;
				ta.setText("");
				BufferedReader bfr = null;// 局部变量必须赋初始值
				try {
					bfr = new BufferedReader(new FileReader(file));
					String line = null;
					while ((line = bfr.readLine()) != null) {
						// System.out.println(line);
						ta.append(line + "\r\n");// 不要忘记添加换行符号
					}
				} catch (IOException io) {
					throw new RuntimeException("读取失败!");
				} finally {
					try {
						if (bfr != null)
							bfr.close();
					} catch (IOException ec) {
						throw new RuntimeException("关闭失败!");
					}
				}

			}
		});
		// 为保存按钮添加监听 通过监听事件 执行动作:保存文本 到文件
		saveItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (file == null) {
					saveDia.setVisible(true);
					String dirPath = saveDia.getDirectory();
					String fileName = saveDia.getFile();
					file = new File(dirPath, fileName);
				}
				BufferedWriter bfw = null;
				try {
					bfw = new BufferedWriter(new FileWriter(file));
					String text = ta.getText();// 返回文本组件内的文本
					bfw.write(text);
					bfw.flush();
				} catch (IOException ec) {
					throw new RuntimeException();
				} finally {
					try {
						if (bfw != null)
							bfw.close();
					} catch (IOException ec) {
						throw new RuntimeException("guan失败!");
					}
				}

			}
		});

	}

	public static void main(String[] args) {
		new MenuDemo();
	}
}



                                                  ------ Java培训、Android培训、iOS培训、.Net培训 、期待与您交流! -------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值