• GUI


     

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

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

    Awt与 Swing
    java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
    javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件

    常见的布局管理器:
    FlowLayout(流式布局管理器)
    从左到右的顺序排列。
    Panel默认的布局管理器。
    BorderLayout(边界布局管理器)
    东,南,西,北,中
    Frame默认的布局管理器。
    GridLayout(网格布局管理器)
    规则的矩阵
    CardLayout(卡片布局管理器)
    选项卡
    GridBagLayout(网格包布局管理器)
    非规则的矩阵

    简单的窗体创建过程:
    Frame  f = new Frame(“my window”);
    f.setLayout(new FlowLayout());    //设置布局管理器
    f.setSize(500,400);    //设置窗体大小
    f.setLocation(300,200);    //设置窗体出现在屏幕的位置
    f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));
    Button button = new Button("我是一个按钮");
    f.add(button);
    f.setVisible(true);
    

    事件监听机制

    确定事件源(容器或组件)
    通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
    该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
    一般用匿名内部类来表示。
    在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
    事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

    窗口事件关闭窗体

    Frame f = new Frame("我的窗体");
    //事件源是窗体,把监听器注册到事件源上
    //事件对象传递给监听器
    f.addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e) {
                         //退出虚拟机,关闭窗口
    		System.exit(0);
    	}
    });
    

    窗口中按钮关闭窗体

    Button button = new Button("我是按钮");
    //事件源是按钮,给按钮注册监听器
    button2.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
    		System.exit(0);
    	}
    });
    

    鼠标监听器(MouseListener)

     void mouseClicked(MouseEvent e)
              鼠标按键在组件上单击(按下并释放)时调用。
     void mouseEntered(MouseEvent e)
              鼠标进入到组件上时调用。
     void mouseExited(MouseEvent e)
              鼠标离开组件时调用。
     void mousePressed(MouseEvent e)
              鼠标按键在组件上按下时调用。
     void mouseReleased(MouseEvent e)
              鼠标按钮在组件上释放时调用。

    简单的记事本程序

    import java.awt.FileDialog;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Menu;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.TextArea;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Notepad extends Frame{
    	//简单的记事本程序
    	
    	private static final long serialVersionUID = 1L;
    	private MenuItem open;
    	private MenuItem save;
    	private MenuItem quit;
    	private TextArea ta;
    	
    	public Notepad() {
    		init();
    		menubar();
    		textArea();
    		event();
    	}
    	
    	private void init() {
    		this.setSize(300, 400);			//设置窗体大小
    		this.setLocation(500, 100);		//设置窗体的位置
    		this.setVisible(true);			//设置窗体显示
    	}
    	
    	private void menubar() {
    		MenuBar mb = new MenuBar();		//创建菜单栏
    		Menu file = new Menu("文件");		//创建菜单
    		open = new MenuItem("打开");
    		save = new MenuItem("保存");
    		quit = new MenuItem("退出");
    		
    		this.setMenuBar(mb);			//将菜单栏添加到窗体上
    		mb.add(file);					//将菜单添加到菜单栏上
    		file.add(open);					//将菜单项添加到菜单上
    		file.add(save);
    		file.add(quit);
    		
    	}
    	
    	private void textArea() {
    		ta = new TextArea();
    		ta.setFont(new Font("Courier New", Font.PLAIN, 20));	//设置字体(字体名字,字体样式,字体大小)
    		this.add(ta);					//将文本区域添加到窗体上
    	}
    	
    	private void event() {
    		this.addWindowListener(new WindowAdapter() {	//关闭窗体
    			@Override
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    		
    		open.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				open();
    			}
    		});
    		
    		save.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				save();
    			}
    		});
    		
    		quit.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
    		
    		ta.addKeyListener(new KeyAdapter() {
    			@Override
    			public void keyReleased(KeyEvent e) {	//键盘释放
    				if(e.getKeyCode() == KeyEvent.VK_O && e.isControlDown())
    					open();
    			}
    		});
    		
    		ta.addKeyListener(new KeyAdapter() {
    			@Override
    			public void keyReleased(KeyEvent e) {
    				if(e.getKeyCode() == KeyEvent.VK_S && e.isControlDown())
    					save();
    			}
    		});
    	}
    	
    	private void open() {
    		FileDialog fd = new FileDialog(this, "打开", FileDialog.LOAD);	//创建对话框对象,并指定模式
    		fd.setVisible(true);				//显示对话框
    	
    		String dir = fd.getDirectory();		//获取对话框的目录
    		String file = fd.getFile();			//获取对话框的文件名
    		if(dir != null && file != null){
    			loadFile(new File(dir,file));	//读取文件
    		}
    	}
    	
    	private void loadFile(File file) {
    		try (
    			FileInputStream fis = new FileInputStream(file);	//读文件的读取流
    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		){
    			int len;
    			byte[] arr = new byte[1024];
    			while((len = fis.read(arr))!= -1) {
    				baos.write(arr, 0, len);
    			}
    			byte[] arr2 = baos.toByteArray();
    			String message = new String(arr2);
    			ta.setText(message);
    			
    		} catch (IOException e) {
    			
    			e.printStackTrace();
    		}
    	}
    	
    	private void save() {
    		FileDialog fd = new FileDialog(this, "保存", FileDialog.SAVE);
    		fd.setVisible(true);
    		
    		String dir = fd.getDirectory();
    		String file = fd.getFile();
    		if(dir != null && file != null) {
    			saveFile(new File(dir,file));
    		}
    	}
    	
    	private void saveFile(File file) {
    		try(
    			FileWriter fw = new FileWriter(file);	//将文本的内容写到指定的文件上
    		){
    			String message = ta.getText();			//获取文本区域中的内容
    			fw.write(message);						//将文本区域的内容写出去
    		}catch(IOException e) {
    			
    		}
    	}
    	public static void main(String[] args) {
    		new Notepad();
    	}
    
    }
    
  • 相关阅读:
    C. Tavas and Karafs 二分查找+贪心
    字符串前缀和后缀匹配
    E
    网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches
    B
    Dividing 多重背包 倍增DP
    Doing Homework 状态压缩DP
    Largest Rectangle in a Histogram 常用技巧 stack的运用
    S = A + A2 + A3 + … + Ak. (推矩阵公式+矩阵幂运算)
    安卓开发:图片的显示Mode
  • 原文地址:https://www.cnblogs.com/sooper/p/3418503.html
Copyright © 2020-2023  润新知