一、GUI(图形用户界面)
1、GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。
2、计算机与用户交互的两种方式:GUI和CLI
        GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。
        CLI: Command LineUser Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观
3、java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。
        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
        javax.Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻 量级控件


二、布局管理器
1、布局:容器中的组件排列方式
2、常见的布局管理器:
        1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
        2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗 体。
        3)GridLayout:网格式布局管理器,规则的矩阵
        4)CardLayout:卡片式布局管理器,即选项卡
        5)GridBayLayout:网格包布局管理器,非规则矩阵


五, 创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。

3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。

5,让窗体显示,通过setVisible(true)



事件监听机制的特点:


1,事件源。


2,事件。


3,监听器。


4,事件处理。






事件源:就是awt包或者swing包中的那么图形界面组件。


事件:每一个事件源都有自己特有的对象事件和共性事件、


监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。






以上三者,在java中都已经定义好了。


直接获取其对象来用就可以了




           代码体现:

import java.awt.*;
import java.awt.event.*;
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 MyWin());//关闭窗口


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("我被打开了");//打开窗口
}
});
f.setVisible(true);//让窗体显示


    7,让按钮具备退出程序的功能:


按钮就是事件源。


那么选择那么监听器呢?


通过关闭窗体示例了解到,想要知道那个组件具备什么样的特有监听器。


需要查看该组件对象的功能。


通过查阅button的描述。发现按钮支持一个特有监听addActionListener


                       

                         


                       




       监听:


          1,//给But添加一个键盘监听。




but.addKeyListener(new KeyAdapter() 

{ 

public void keyPressed(KeyEvent e) 

{ 

if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER) 

System.exit(0);//Ctri键加上Enter键结束窗口 

 

//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode()); 

 

} 

});*/ 

            2, 
 
//鼠标监听: 

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) 

 

} 

});

 六,对话框  


     何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的          这个对象。 


     示例:


//练习:代码实现图中的窗口格式列出目录下的文件,如果输入的信息有误提示对话框
 import java.awt.*;
 import java.awt.event.*;
 import java.io.*;
 class DiaoYong
 {
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
     //如果输入有误弹出对话框:
private Dialog d;
private Button okbut;
private Label lab;
DiaoYong()
{
          init();
}
public void init()
{
f=new Frame("my fame");
f.setBounds(300,100,500,400);//300与左边的距离。100与上边的距离。
                           //500是窗体的长度。400是窗体的宽度
f.setLayout(new FlowLayout());
tf=new TextField(60);
but=new Button("转到");
ta=new TextArea(20,50);//20是表示横标。50是表示纵标
f.add(tf);
f.add(but);
f.add(ta);


d=new Dialog(f,"提示信息-self",true);//创建对话框
d.setBounds(400,200,250,150);
d.setLayout(new FlowLayout());
lab=new Label();
okbut=new Button("确定");
d.add(lab);
d.add(okbut);


myEvent();
f.setVisible(true);
}
public void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
showDir();
}
});
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
});
d.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);//让窗口不显示
}
});
okbut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);//让窗口不显示
}
});
}
public void showDir()
{
String dirPath=tf.getText();
File dir=new File(dirPath);
if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String [] st=dir.list();//列出路径名表示的目录中的文件和目录
for(String name:st)
{
   ta.append(name+"\t\n");
}
}
//ta.setText(txt);
         //tf.setText("");
//System.out.println(txt);
else
{
String s="您输入有误:"+dirPath+"请重新输入";
lab.setText(s);//错误信息加入到对话框中
d.setVisible(true);
}
}
 }
 class LXDemo
 {
public static void main(String[] args) 
{
new DiaoYong();
}
 }                        
                          
                            
 
         

         

         





七,菜单:Menu 

        

        示例: 

                   //菜单: 

 import java.awt.*; 

 import java.awt.event.*; 

 class Mymenu 

 { 

private Frame f;//创建窗体 

private MenuBar mb;//将菜单栏与 Frame 对象关联 

private Menu m,subMenu;//创建菜单栏 

private MenuItem closeItem,subItem;//创建菜单项 

Mymenu() 

{ 

init(); 

} 

public void init() 

{ 

f=new Frame("my fame"); 

f.setBounds(300,100,500,600); 

f.setLayout(new FlowLayout()); 

mb=new MenuBar(); 

m=new Menu("文件"); 

subMenu=new Menu("子菜单");//在"文件"栏目下再添加菜单栏:"子菜单" 



closeItem=new MenuItem("退出"); 

subItem=new MenuItem("子条目");//在"文件"栏目下再添加菜单项:"子条目" 



subMenu.add(subItem);//在"子菜单"下再添加"子条目" 

m.add(subMenu); 

m.add(closeItem); 



mb.add(m); 

f.setMenuBar(mb); 



myEvent(); 

f.setVisible(true); 

} 

public void myEvent() 

{ 

closeItem.addActionListener(new ActionListener() 

{ 

public void actionPerformed(ActionEvent e) 

{ 

System.exit(0); 

} 

}); 

f.addWindowListener(new WindowAdapter() 

{ 

public void windowClosing(WindowEvent e) 

{ 

System.exit(0); 

} 

}); 

} 

 } 

 class  MymenuDemo 

 { 

public static void main(String[] args)  

{ 

new Mymenu(); 

} 

 }