zoukankan      html  css  js  c++  java
  • 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();
    	}
    
    }
    
  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/sooper/p/3418503.html
Copyright © 2011-2022 走看看