zoukankan      html  css  js  c++  java
  • 黑马程序员——JAVA基础之GUI

     -----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培训、期待与您交流! -------

  • 相关阅读:
    ubuntu下php-fpm多实例运行配置
    ubuntu下nginx+PHP-FPM安装配置
    php中include_path配置
    laravel中的队列
    laravel权限控制Gate
    Configuring an NVIDIA Jetson TX2
    NVIDIA Jetson TX2 の設定
    3-Jetson Nano Developer KitでAWS IoT GreengrassのML Inferenceを試す(GPU編)
    2-Jetson Nano Developer KitでAWS IoT GreengrassのML Inferenceを試す
    1-Jetson Nano Developer KitでAWS IoT Greengrassを動かしてみる
  • 原文地址:https://www.cnblogs.com/runwind/p/4212175.html
Copyright © 2011-2022 走看看